Python3 DataFrame缺失值的处理方法
作者:古月财经之月光宝盒
一、缺失值的判断
在通过Pandas做数据分析时,数据中往往会因为一些原因而出现缺失值NaN (Nota number)o比如前文中的例子,当两个DataFrame对象进行简单运算时,无法匹配的位置会出现缺失值NaN或者None.
isnull ( )和notnull ( )方法都可以用于判断数据是否为缺失值( NaN或者None).如果是缺失值,则isnull()返回值为True, notnull()返回值为False.
df2 Out[170]: A B C D a 2.0 4.0 6.0 NaN b 6.0 8.0 10.0 NaN c 10.0 12.0 14.0 NaN df2.isnull() Out[171]: A B C D a False False False True b False False False True c False False False True df2.notnull() Out[172]: A B C D a True True True False b True True True False c True True True False
二、缺失值数据的过滤
有时遇到包含缺失值的数据处理起来比较简单,只需要保留有数值的数据即可:
df2 Out[182]: A B C D a 2.0 4.0 6.0 NaN b 6.0 8.0 10.0 NaN c 10.0 12.0 14.0 1.0 #把D列中的缺失值过滤掉 df2.D[df2.D.notnull()] Out[183]: c 1.0 Name: D, dtype: float64
三、缺失值数据的填充
有时处理数据时我们会想将缺失值用实际的值做替代,Pandas包里也有函数可以调 用:DataFrame.fillna(value=None, method = None, axis = None, inplace=False, limit=None)
参数value是在缺失值处填充的值,可以是数值数字,也可以是字符串;method 是填充的方式,默认为None,也可以取值为ffin、pad、bfill或backfill,其中ffill/pad是用行或列方向上的上一个观测值来填充缺失值,bfill/backfin是用行或列方向上的下一个观测 值来填充;axis与method配合使用,指定行(axis=l)或列(axis=0)的方向;limit=None 时,会填充连续的缺失值,如果指定数值的话,比如limit=2,只会依次填充连续NaN值的 指定数字个数(比如2个);若inplace=False则不会变更原DataFrame,若inplace=True, 则会改变原DataFrame。
import pandas as pd import numpy as np h2h2df=pd.DataFrame(np.arange(1,21).reshape(5,4),index=list('abcde'),columns=list("ABCD")) h2df.loc['c','A']=np.nan h2df.loc['b':'d','C']=np.nan h2df Out[192]: A B C D a 1.0 2 3.0 4 b 5.0 6 NaN 8 c NaN 10 NaN 12 d 13.0 14 NaN 16 e 17.0 18 19.0 20 h2df.fillna(0) Out[193]: A B C D a 1.0 2 3.0 4 b 5.0 6 0.0 8 c 0.0 10 0.0 12 d 13.0 14 0.0 16 e 17.0 18 19.0 20 h2df.fillna(method='ffill') Out[194]: A B C D a 1.0 2 3.0 4 b 5.0 6 3.0 8 c 5.0 10 3.0 12 d 13.0 14 3.0 16 e 17.0 18 19.0 20 h2df.fillna(method='pad') Out[197]: A B C D a 1.0 2 3.0 4 b 5.0 6 3.0 8 c 5.0 10 3.0 12 d 13.0 14 3.0 16 e 17.0 18 19.0 20 h2df.fillna(method='backfill',axis=1) Out[196]: A B C D a 1.0 2.0 3.0 4.0 b 5.0 6.0 8.0 8.0 c 10.0 10.0 12.0 12.0 d 13.0 14.0 16.0 16.0 e 17.0 18.0 19.0 20.0 h2df.fillna(method='ffill',limit=2) Out[198]: A B C D a 1.0 2 3.0 4 b 5.0 6 3.0 8 c 5.0 10 3.0 12 d 13.0 14 NaN 16 e 17.0 18 19.0 20
四、缺失值的删除
Pandas提供对包含缺失值的数据集进行行列的删除操作:
DataFrame.dropna(axis=0, how=‘any’, thresh=None)
axis = 0指删除包含缺失值的行,axis = 1指删除包含缺失值的列,默认为0; how=any表示只要有一个缺失值就删除该行(列),how = all表示只有当所有的元素都为缺失值时才删除该行(列),how默认取值为any;thresh默认为None。当thresh=5时表示只有当某行(列)缺失值的数量大于或者等于5时删除该 行(列)。
df Out[199]: A B C D a 1.0 2 3.0 4 b 5.0 6 NaN 8 c NaN 10 NaN 12 d 13.0 14 NaN 16 e 17.0 18 19.0 20 df.dropna(axis=0) Out[200]: A B C D a 1.0 2 3.0 4 e 17.0 18 19.0 20 df.dropna(axis=1) Out[201]: B D a 2 4 b 6 8 c 10 12 d 14 16 e 18 20
到此这篇关于Python3 DataFrame缺失值的处理的文章就介绍到这了,更多相关Python3 DataFrame缺失值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!