Nhảy đến nội dung
apply_lambda_astype

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