Mike的Python學院

Python、PYTHON資料分析、資料處理、程式語言、軟體程式設計、資料分析、Pandas、資料清理

Mike Ku

Learn Code With Mike品牌創辦人

2022/01/20

教你用Pandas套件清理資料中的常見資料型態問題(上)

Q: Pandas數字資料型態處理
在讀取資料集時,Pandas套件都會自動判定欄位的資料型態,這時候,當其中的資料含有髒資料(Dirty Data),就會發生誤判的情況,導致後續分析或計算的錯誤。
這邊以Kaggle網站的ASUS筆電資料集( https://www.kaggle.com/bhageshcodebeast/asus-laptops-2020-jun )為例,讀取後如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df)
接下來,使用Pandas套件的info()方法(Method),來查看各欄位的資料型態,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df.info())
其中,會發現本來應該為數字型態的「Warranty保固期欄位」,Pandas套件判定為object型態,以字串型態進行處理,所以,如果將「Warranty保固期欄位」進行加總,就會得到如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
print(df['Warrenty'].sum())
會導致Pandas套件誤判,就是因為「Warranty保固期欄位」中,包含了數字以外的髒資料(Dirty Data),造成Pandas套件無法以數字型態進行加總。
而資料清理的方法,就是利用Pandas套件的strip()清除前後字串方法(Method),移除Y字串,再透過astype()方法(Method)將欄位轉型為int(整數),如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #移除Y字串
df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #轉型為int整數
接下來,可以利用assert陳述式來驗證欄位型態,如果沒有錯誤訊息,代表驗證的條件成立,反之,則會顯示錯誤訊息,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #移除Y字串
df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #轉型為int整數
assert df['Warrenty_Year'].dtype == 'int'
這時候,將「Warranty保固期欄位」進行加總,就會得到正確的計算結果,如下範例:
import pandas as pd
df = pd.read_csv('AsusLaptops.csv')
df['Warrenty_Trim'] = df['Warrenty'].str.strip('Y') #新建欄位移除Y字串
df['Warrenty_Year'] = df['Warrenty_Trim'].astype('int') #新建欄位將去除字串的欄位轉型為int整數
assert df['Warrenty_Year'].dtype == 'int' #驗證欄位資料型態
print(df['Warrenty_Year'].sum()) #執行結果99
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/12/processing-data-type-with-pandas.html
)網站觀看更多精彩內容。
2 0 256 0