Python3 DataFrame缺失值的处理:判断、过滤、填充与删除
本文详细介绍Python3中Pandas库处理DataFrame缺失值(NaN/None)的四种核心方法。涵盖使用isnull和notnull进行判断,通过布尔索引过滤含缺失值数据,利用fillna方法按指定策略(如ffill/bfill)或数值填充,以及使用dropna按行或列删除缺失数据。文章包含具体参数说明与代码示例,帮助开发者高效完成数据清洗工作。
一、缺失值的判断
在使用Pandas进行数据分析时,数据中常因各种原因出现缺失值NaN(Not a number)或None。例如,当两个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,也可取ffill、pad、bfill或backfill。其中ffill/pad使用行或列方向上的上一个观测值填充缺失值,bfill/backfill使用下一个观测值填充;axis与method配合使用,指定行(axis=1)或列(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缺失值内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













