在基于 pandas 的 DataFrame 对象进行数据处理时(如样本特征的缺省值处理),可以使用 DataFrame 对象的 fillna 函数进行填充,同样可以针对指定的列进行填补空值,单列的操作是调用 Series 对象的 fillna 函数。
fillna 函数
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
fillna 函数将用指定的值(value)或方式(method)填充 NA/NaN 等空值缺失值。
- value
- 用于填充的值,可以是数值、字典、Series 对象 或 DataFrame 对象。
- method
- 当没有指定 value 参数时,可以该参数的内置方式填充缺失值,可选项有 {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None},默认值为 None;backfill 和 bfill 用下一个非缺失值填充该缺失值,pad 和 ffill 用前一个非缺失值去填充该缺失值。该参数通常和 axis 一起使用,值得注意的是,method 参数不能与 value 同时出现。
- axis
- 指定填充维度,具体指行维度或列维度,也可以理解为指定填充的方向,可选值有整数 0 或 1,也可以是字符串,选项有 'index' 或 'columns',0 等同于 'index' 表示行维度,1 等同于 'columns' 表示列维度。
- inplace
- 是否修改原对象的值,True 表示修改,默认是 False,表示创建一个副本,修改副本,原对象不变。
- limit
- 指定填充的个数上限,默认为 None,即不限制。
示例
通过常数填充 NaN
填充前:
import pandas as pd
df = pd.read_csv("nba.csv")
DataFrame 对象 df 如下图:
下面将如上示例的 College 列的 NaN 填充为 'No College',同时改变原对象的值,代码如下:
import pandas as pd
df = pd.read_csv("nba.csv")
df["College"].fillna("No College", inplace = True)
执行上述代码后,df 变为如下输出:
利用 method 参数填充 NaN
下面示例,指定 method 为 ffill,即缺失值的前一个值来填充 NaN,同样针对 College 列进行操作,会看到第 4、5 行的空值变为 Georgia State。
import pandas as pd
df = pd.read_csv("nba.csv")
df["College"].fillna(method ='ffill', inplace = True)
输出如下:
使用 limit 参数设置填充上限
设置 limit 参数为 1,这样只会按序填充完 1 个空值,具体示例如下:
import pandas as pd
df = pd.read_csv("nba.csv")
df["College"].fillna(method ='ffill', limit = 1, inplace = True)
代码执行完结果为只改变了第 4 行数据,第 5 行空值未填充,输出如下: