Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.fillna方法的使用。

DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

使用指定的方法填充NA/NaN值。

参数

value :scalar(标量), dict, Series, 或DataFrame

用于填充孔的值(例如0),或者是dict / Series / DataFrame的值,

该值指定用于每个索引(对于Series)或列(对于DataFrame)使用哪个值。

不在dict / Series / DataFrame中的值将不被填充。该值不能是列表(list)。

method  : {'backfill','bfill','pad','ffill',None},默认为None

填充重新索引的系列填充板/填充中的holes的方法:

将最后一个有效观察向前传播到下一个有效回填/填充:

使用下一个有效观察来填充间隙。

axis : {0或'index',1或'columns'}

填充缺失值所沿的轴。

inplace : bool,默认为False

如果为True,则就地填充。

注意:这将修改此对象上的任何其他视图

(例如,DataFrame中列的无副本切片)。

limit : int,默认值None

如果指定了method,

则这是要向前/向后填充的连续NaN值的最大数量。

换句话说,如果存在连续的NaN数量大于此数量的缺口,

它将仅被部分填充。如果未指定method,

则这是将填写NaN的整个轴上的最大条目数。

如果不为None,则必须大于0。

downcast : dict,默认为None

item-> dtype的字典,如果可能的话,将向下转换,

或者是字符串“infer”

它将尝试向下转换为适当的相等类型

(例如,如果可能,则从float64int64)。

返回值

DataFrame

缺少值的对象已填充。

例子

>>> df = pd.DataFrame([[np.nan, 2, np.nan, 0],
... [3, 4, np.nan, 1],
... [np.nan, np.nan, np.nan, 5],
... [np.nan, 3, np.nan, 4]],
... columns=list('ABCD'))
>>> df
A B C D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 NaN NaN NaN 5
3 NaN 3.0 NaN 4

将所有NaN元素替换为0

>>> df.fillna(0)
A B C D
0 0.0 2.0 0.0 0
1 3.0 4.0 0.0 1
2 0.0 0.0 0.0 5
3 0.0 3.0 0.0 4

我们还可以向前或向后传播非null值

>>> df.fillna(method='ffill')
A B C D
0 NaN 2.0 NaN 0
1 3.0 4.0 NaN 1
2 3.0 4.0 NaN 5
3 3.0 3.0 NaN 4

将“ A”,“ B”,“ C”和“ D”列中的所有NaN元素分别替换为0、1、2和3

>>> values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
>>> df.fillna(value=values)
A B C D
0 0.0 2.0 2.0 0
1 3.0 4.0 2.0 1
2 0.0 1.0 2.0 5
3 0.0 3.0 2.0 4

仅替换第一个NaN元素

>>> df.fillna(value=values, limit=1)
A B C D
0 0.0 2.0 2.0 0
1 3.0 4.0 NaN 1
2 NaN 1.0 NaN 5
3 NaN 3.0 NaN 4