Pandas df chuyển str thành float
Trong bản excel khi bạn chuyển đổi sang csv file thì các cột giá sẽ bị chuyển sang định dạng string, và bạn cần chuyển toàn bộ giá trị của cột này sang int hoặc float để phân tích. Bài viết này giới thiệu ba cách chuyển string thành float cho Pandas Dataframe.
(1) Sử dụng astype(float)
df['Cột string'] = df['Cột string'].astype(float)
(2) Sử dụng apply() và lambda, nếu string có dấu , để phân cách ví dụ 50,000
df['Cột string'] = df.apply(lambda x: float(x['Cột string'].replace(',', '')), axis=1)
(3) Sử dụng to_numeric()
df['DataFrame Column'] = pd.to_numeric(df['DataFrame Column'], errors='coerce')
Dưới đây là một số ví dụ chuyển string thành float
(1) Cho cột có chưa giá trị số nhưng lưu ở dạng chữ (string)
(2) Cho cột có chưa giá trị số nhưng lưu ở dạng chữ (string) và có dấu , phân tách hàng nghìn.
(3) Cho cột có chứa cả giá trị số và chữ lưu ở dạng chữ.
Ví dụ 1: Giá trị số lưu bằng chữ (strings)
Giờ mình tạo df với 2 cột:
Sản phẩm Giá (VNĐ)
Ruou 200000
Bia 10000
Để tạo df như trên sử dụng gói pandas.
import pandas as pd Data = {'Sản phẩm': ['Ruou','Bia'], 'Giá': ['200000','10000']} df = pd.DataFrame(Data) print(df) Output:
Sản phẩm Giá
0 Ruou 200000
1 Bia 10000
print(df.dtypes) Output:
Sản phẩm object
Giá object
Cột giá là một 'object', giờ mình sẽ chuyển các giá trị ở cột 'Giá' thành 'float'
df['Giá'] = df['Giá'].astype(float)
Kiểm tra lại với print(df.dtypes)
Sản phẩm object
Giá float64
Ví dụ 2: Giá trị số lưu bằng chữ (strings) có dấu , phân cách hàng nghìn.
Product Giá (VNĐ)
Ruou 200,000
Bia 10,000
Data = {'Sản phẩm': ['Ruou','Bia'], 'Giá': ['200,000','10,000']} df = pd.DataFrame(Data) df['Price'] = df['Price'].astype(float) ValueError: could not convert string to float: '200,000'
Các tốt nhất là sử dụng apply() và lambda
df['Giá'] = df.apply(lambda x: float(x['Giá'].replace(',', '')), axis=1)
Ví dụ 3: Giá trị số lưu ở cột cả bằng chữ (strings) và bằng số
Product Giá (VNĐ)
Ruou 200,000
Bia 10,000
Coca 10xxx
Soda thay_doi
import pandas as pd Data = {'Product': ['Ruou','Bia','Coca','Soda'], 'Price': ['200,000','10,000','10xxx','thay_doi']} df = pd.DataFrame(Data) print (df) Product Price 0 Ruou 200,000 1 Bia 10,000 2 Coca 10xxx 3 Soda thay_doi # Thay thế ',' bằng '' df['Price'] = df['Price'].str.replace(',', '') print(df.dtypes) Product object Price object dtype: object df['Price'] = pd.to_numeric(df['Price'], errors='coerce')
pd.to_numeric sử dụng để chuyển giá trị trong cột Price thành float.
df['Price'] = pd.to_numeric(df['Price'], errors='coerce')
Thiết lập errors='coerce' sẽ chuyển giá trị không phải số thành NaN.
Product Price
0 Ruou 200000.0
1 Bia 10000.0
2 Coca NaN
3 Soda NaN