Python3 DataFrame缺失值的处理:判断、过滤、填充与删除

Noah
Noah
发布时间:2026-10-15 | 3人浏览过
原创

本文详细介绍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缺失值内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表