資料清洗是資料分析關鍵的一步,直接影響之后的處理作業
資料需要修改嗎?有什么需要修改的嗎?資料應該怎么調整才能適用于接下來的分析和挖掘?
是一個迭代的程序,實際專案中可能需要不止一次地執行這些清洗操作
1. 處理缺失資料:
- pd.fillna()
-
pd.dropna()
2. 資料轉換
2.1 處理重復資料
duplicated()回傳布爾型Series表示每行是否為重復行
示例代碼:
import numpy as np import pandas as pd df_obj = pd.DataFrame({'data1' : ['a'] * 4 + ['b'] * 4, 'data2' : np.random.randint(0, 4, 8)}) print(df_obj) print(df_obj.duplicated())
運行結果:
# print(df_obj) data1 data2 0 a 3 1 a 2 2 a 3 3 a 3 4 b 1 5 b 0 6 b 3 7 b 0 # print(df_obj.duplicated()) 0 False 1 False 2 True 3 True 4 False 5 False 6 False 7 True dtype: bool
drop_duplicates()過濾重復行
- 默認判斷全部列
- 可指定按某些列判斷
示例代碼:
print(df_obj.drop_duplicates()) print(df_obj.drop_duplicates('data2'))
運行結果:
# print(df_obj.drop_duplicates()) data1 data2 0 a 3 1 a 2 4 b 1 5 b 0 6 b 3 # print(df_obj.drop_duplicates('data2')) data1 data2 0 a 3 1 a 2 4 b 1 5 b 0
2.2 利用函式或映射進行資料轉換
根據map傳入的函式對每行或每列進行轉換
示例代碼:
ser_obj = pd.Series(np.random.randint(0,10,10)) print(ser_obj) print(ser_obj.map(lambda x : x ** 2))
運行結果:
# print(ser_obj) 0 1 1 4 2 8 3 6 4 8 5 6 6 6 7 4 8 7 9 3 dtype: int64 # print(ser_obj.map(lambda x : x ** 2)) 0 1 1 16 2 64 3 36 4 64 5 36 6 36 7 16 8 49 9 9 dtype: int64
2.3 替換值
replace根據值的內容進行替換
示例代碼:
# 單個值替換單個值 print(ser_obj.replace(1, -100)) # 多個值替換一個值 print(ser_obj.replace([6, 8], -100)) # 多個值替換多個值 print(ser_obj.replace([4, 7], [-100, -200]))
運行結果:
# print(ser_obj.replace(1, -100)) 0 -100 1 4 2 8 3 6 4 8 5 6 6 6 7 4 8 7 9 3 dtype: int64 # print(ser_obj.replace([6, 8], -100)) 0 1 1 4 2 -100 3 -100 4 -100 5 -100 6 -100 7 4 8 7 9 3 dtype: int64 # print(ser_obj.replace([4, 7], [-100, -200])) 0 1 1 -100 2 8 3 6 4 8 5 6 6 6 7 -100 8 -200 9 3 dtype: int64
3. 字串操作
3.1 字串方法
3.2 正則運算式方法
3.3 pandas字串函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273978.html
標籤:其他
下一篇:高仿花生殼客戶端程式(qt)
