Python pandas.DataFrame.fillna函数方法的使用

pandas.DataFrame.fillna() 方法用于填充缺失数据(NaN)。可以用特定的值或使用其他方法填补 DataFrame 中的缺失值。这些缺失值可能是由于数据收集过程中的错误、数据格式问题或其他原因造成的。fillna() 提供了多种方法来处理这些缺失值,使得数据更加完整、便于分析。本文主要介绍一下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

缺少值的对象已填充。

例子

1)将所有NaN元素替换为0

import pandas as pd
import numpy as np

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'))

print(df.fillna(0))

2)使用前向填充(向前传播非null值)

import pandas as pd
import numpy as np

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'))

print(df.fillna(method='ffill'))

3)使用字典按列替换NaN元素

import pandas as pd
import numpy as np

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'))

values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
print(df.fillna(value=values))

4)仅替换第一个NaN元素

import pandas as pd
import numpy as np

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'))

values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
print(df.fillna(value=values, limit=1))

推荐阅读
cjavapy编程之路首页