1. 程式人生 > 程式設計 >Python Pandas對缺失值的處理方法

Python Pandas對缺失值的處理方法

Pandas使用這些函式處理缺失值:

  • isnull和notnull:檢測是否是空值,可用於df和series
  • dropna:丟棄、刪除缺失值
    • axis : 刪除行還是列,{0 or ‘index',1 or ‘columns'},default 0
    • how : 如果等於any則任何值為空都刪除,如果等於all則所有值都為空才刪除
    • inplace : 如果為True則修改當前df,否則返回新的df
  • fillna:填充空值
    • value:用於填充的值,可以是單個值,或者字典(key是列名,value是值)
    • method : 等於ffill使用前一個不為空的值填充forword fill;等於bfill使用後一個不為空的值填充backword fill
    • axis : 按行還是列填充,{0 or ‘index',1 or ‘columns'}
    • inplace : 如果為True則修改當前df,否則返回新的df
import pandas as pd

例項:特殊Excel的讀取、清洗、處理

步驟1:讀取excel的時候,忽略前幾個空行

studf = pd.read_excel("./datas/student_excel/student_excel.xlsx",skiprows=2)
studf

Unnamed: 0 姓名 科目 分數
0 NaN 小明 語文 85.0
1 NaN NaN 數學 80.0
2 NaN NaN 英語 90.0
3 NaN NaN NaN NaN
4 NaN 小王 語文 85.0
5 NaN NaN 數學 NaN
6 NaN NaN 英語 90.0
7 NaN NaN NaN NaN
8 NaN 小剛 語文 85.0
9 NaN NaN 數學 80.0
10 NaN NaN 英語 90.0

步驟2:檢測空值

studf.isnull()

Unnamed: 0 姓名 科目 分數
0 True False False False
1 True True False False
2 True True False False
3 True True True True
4 True False False False
5 True True False True
6 True True False False
7 True True True True
8 True False False False
9 True True False False
10 True True False False

studf["分數"].isnull()
0 False
1 False
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 False
10 False
Name: 分數,dtype: bool
studf["分數"].notnull()
0 True
1 True
2 True
3 False
4 True
5 False
6 True
7 False
8 True
9 True
10 True
Name: 分數,dtype: bool
# 篩選沒有空分數的所有行
studf.loc[studf["分數"].notnull(),:]

Unnamed: 0 姓名 科目 分數
0 NaN 小明 語文 85.0
1 NaN NaN 數學 80.0
2 NaN NaN 英語 90.0
4 NaN 小王 語文 85.0
6 NaN NaN 英語 90.0
8 NaN 小剛 語文 85.0
9 NaN NaN 數學 80.0
10 NaN NaN 英語 90.0

步驟3:刪除掉全是空值的列

studf.dropna(axis="columns",how='all',inplace=True)
studf

姓名 科目 分數
0 小明 語文 85.0
1 NaN 數學 80.0
2 NaN 英語 90.0
3 NaN NaN NaN
4 小王 語文 85.0
5 NaN 數學 NaN
6 NaN 英語 90.0
7 NaN NaN NaN
8 小剛 語文 85.0
9 NaN 數學 80.0
10 NaN 英語 90.0

步驟4:刪除掉全是空值的行

studf.dropna(axis="index",inplace=True)
studf

姓名 科目 分數
0 小明 語文 85.0
1 NaN 數學 80.0
2 NaN 英語 90.0
4 小王 語文 85.0
5 NaN 數學 NaN
6 NaN 英語 90.0
8 小剛 語文 85.0
9 NaN 數學 80.0
10 NaN 英語 90.0

步驟5:將分數列為空的填充為0分

studf.fillna({"分數":0})

姓名 科目 分數
0 小明 語文 85.0
1 NaN 數學 80.0
2 NaN 英語 90.0
4 小王 語文 85.0
5 NaN 數學 0.0
6 NaN 英語 90.0
8 小剛 語文 85.0
9 NaN 數學 80.0
10 NaN 英語 90.0

# 等同於
studf.loc[:,'分數'] = studf['分數'].fillna(0)
studf

姓名 科目 分數
0 小明 語文 85.0
1 NaN 數學 80.0
2 NaN 英語 90.0
4 小王 語文 85.0
5 NaN 數學 0.0
6 NaN 英語 90.0
8 小剛 語文 85.0
9 NaN 數學 80.0
10 NaN 英語 90.0

步驟6:將姓名的缺失值填充

使用前面的有效值填充,用ffill:forward fill

studf.loc[:,'姓名'] = studf['姓名'].fillna(method="ffill")
studf

姓名 科目 分數
0 小明 語文 85.0
1 小明 數學 80.0
2 小明 英語 90.0
4 小王 語文 85.0
5 小王 數學 0.0
6 小王 英語 90.0
8 小剛 語文 85.0
9 小剛 數學 80.0
10 小剛 英語 90.0

步驟7:將清洗好的excel儲存

studf.to_excel("./datas/student_excel/student_excel_clean.xlsx",index=False)

總結

以上就是我在處理客戶端真實IP的方法,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。