Sử dụng apply() để chuyển đổi một cột

Submitted by tinhxleev2 on Wed, 05/06/2020 - 04:18

Bài này nằm trong mục tách và chuyển đổi dữ liệu

Phương pháp .apply() có thể sử dụng vào một pandas DataFrame để áp dụng một chức năng bất thường vào từng thành phần trong cột đó.

Ví dụ cột là có giá trị là đường kính, giờ mình muốn chuyển sang thành chu vi, thì chỉ cần truy cập vào cột này và thêm df.apply(lambda d: d*3.14)

Sau khi chuyển đổi xong cột này thì bạn có thể đặt tên mới có cột này bằng cách. 

df.columns = ['tên cột mới']
Lưu ý thuộc tính .columns có thể áp dụng trên hiều cột. 

Mình sẽ làm một ví dụ cụ thể. 

Lấy import csv file trên mạng, lập dataframe cho file này, rồi chuyển đổi một hoặc nhiều cột bất kỳ. File csv mình lấy từ Meteoblue 

#Nhập gói pandas để tạo dataframe

import pandas as pd

#Đọc file csv mình đã đính kèm dưới bài viết

df = read_csv('http://ledinhtinh.com/sites/default/files/2020-05/dataexport_20200506T070347.csv')

#Kiểm tra df này thì mình muốn lấy dữ liệu từ hàng thứ 10 trở đi, mình sẽ dùng iloc để tạo một dataframe mới

df1 = df.iloc[10:, :]

#Thế nhưng index giờ đã thay đổi mình sẽ reset lại và xóa cột index cũ đi

df1 = df1.reset_index()

del df1['index']

#Kiểm tra lại 

print(df1.head())

#Cột Pittsburgh là cột tính theo độ C giờ mình tác cột này và chuyển thành độ F

df_F = df1[['Pittsburgh']].apply(lambda c: c + 32)

#Báo lỗi vì cột Pittsburgh chứa toàn string

df1['Pittsburgh'] = pd.to_numeric(df1['Pittsburgh'])

Sau khi chạy dòng lệnh này thì bạn có thể tách và chuyển đổi cột với dòng lệnh trước.

#Nếu không sử dung lambda thì bạn có thể dùng hàm

df to_F(c):    

   return c + 32

Có khá nhiều việc nhỏ nhặt trong khi bạn refine - làm gọn dữ liệu, việc nắm chắc một số methods sẽ giúp việc bạn xử lý dữ liệu nhanh hơn. 

practice_file