Pandas的学习(5.pandas中处理丢失数据和空值数据以及填充空值数据)
處理丟失數據
? ?有兩種丟失的數據:
? ? ? ?--? None
? ? ? ?--? np.nan(NaN)
1.None
? ? ? ? ? None是Python自帶的,其類型為python object。因此,None不能參與到任何計算中
? ? ?object類型的運算要比int類型的運算慢得多
?2.np.nan(NaN)
? ? ? ? ? ?np.nan是浮點類型,能參與到計算中。但計算的結果總是NaN
? ? ? ? 但可以使用np.nan() 函數來計算nan,此時視nan為?3.pandas中的None與NaN? (1) pandas中None與np.nan都視作np.nan
? ?(1) 判斷函數:
df.isnull() df.isnull.any() df.isnull.all() df.notnull() df.notnull.any() df.notnull.all() '''具體的代碼實例以及功能如下:''' from pandas import DataFrame, Series import numpy as npdf = DataFrame({"age": [20, 21, 19, 22, 23], 'salary': [10000, 11000, 9900, 8500, 15000]},index=['張三', '李四', '小趙', '小王', '小馮'], columns=['age', 'salary', 'work']) # 插入數據 df.work['李四':'小王'] = 'python' print(df) """age salary work 張三 20 10000 NaN 李四 21 11000 python 小趙 19 9900 python 小王 22 8500 python 小馮 23 15000 NaN """'''1.調用isnull()方法,判斷是否為空''' print(df.isnull()) """age salary work 張三 False False True 李四 False False False 小趙 False False False 小王 False False False 小馮 False False True """'''2. isnull().any() 只有數據有一個為空,即為Trueany(axis=0):只要數據有一個為True就為這“列”就為Trueany(axis=1):只要數據有一個為True就為這“行”就為True''' s1 = df.isnull().any(axis=1) '''(獲取數據為空的數據)把獲得的Series在使用DataFrame取值''' print(df[s1]) """age salary work 張三 20 10000 NaN 小馮 23 15000 NaN """ '''3.isnull().all() 數據全部為空時,才為True,axis同any()''' print(df.isnull().all(axis=1)) """ 張三 False 李四 False 小趙 False 小王 False 小馮 False dtype: bool """'''4.notnull() 判斷數據是否不為空''' print(df.notnull()) """age salary work 張三 True True False 李四 True True True 小趙 True True True 小王 True True True 小馮 True True False """ ''' 5notnull().any() 只有數據有一個不為空,即為Trueany(axis=0):只要數據有一個不為True就為這“列”就為Trueany(axis=1):只要數據有一個不為True就為這“行”就為True''' print(df.notnull().any(axis=1)) """ 張三 True 李四 True 小趙 True 小王 True 小馮 True dtype: bool """'''6.notnull().all() 數據全部不為空時,才為True,axis同any()''' s2 = df.notnull().all(axis=1) print(s2) """ 張三 False 李四 True 小趙 True 小王 True 小馮 False dtype: bool """ '''取出沒有一個空值的數據''' print(df[s2]) """age salary work 李四 21 11000 python 小趙 19 9900 python 小王 22 8500 python """(2) 過濾函數
? ? ·? dropna()? ? ? ? ? ? 可以選擇過濾的是行還是列(默認為行)? , 也可以選擇過濾的方式? 參數 :how='all'
'''dropna(),中的參數axis默認為0,即為行''' '''一行數據只要有一個為空就進行刪除,如果加上參數how='all'代表一行都為空時才刪除''' print(df.dropna()) """age salary work 李四 21 11000 python 小趙 19 9900 python 小王 22 8500 python """ '''一列數據只要有一個為空就進行刪除,參數how='all'代表一列都為空時才刪除''' print(df.dropna(axis=1)) """age salary 張三 20 10000 李四 21 11000 小趙 19 9900 小王 22 8500 小馮 23 15000 """(3) 填充函數 Series/DataFrame
? ? --? ?fillna()? ? ? 參數value=''? 即為要填充的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?method:對應的值 ?'bfill'(選擇后面的填充)或者'ffill(選擇前面的填充)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?inplace:True 是否選擇在原來的基礎上修改,加上該參數沒有返回值
'''fillna() 填充所有的空值''' print(df.fillna(value="填充值")) """age salary work 張三 20 10000 填充值 李四 21 11000 python 小趙 19 9900 python 小王 22 8500 python 小馮 23 15000 填充值 """ '''可以選擇向前填充還是向后填充參數method:對應的值 'bfill'(選擇后面的填充)或者'ffill(選擇前面的填充)inplace:True 是否選擇在原來的基礎上修改,沒有返回值對于DataFrame來說,選擇填充的軸axis.-- axis=0 index/行-- axis=1 columns/列''' print(df.fillna(method='bfill')) """ # 因為最后一個后面沒有值,所以最后一個填充還是為NaNage salary work 張三 20 10000 python 李四 21 11000 python 小趙 19 9900 python 小王 22 8500 python 小馮 23 15000 NaN """ print(df.fillna(method='ffill')) """ # 因為第一個的前沒有值,所以第一個填充還是NaNage salary work 張三 20 10000 NaN 李四 21 11000 python 小趙 19 9900 python 小王 22 8500 python 小馮 23 15000 python """?
總結
以上是生活随笔為你收集整理的Pandas的学习(5.pandas中处理丢失数据和空值数据以及填充空值数据)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pandas的学习(4.DataFram
- 下一篇: Pandas的学习(6.DataFram