pandas系列学习教程——fillna()方法

fillna() 方法是 Pandas 中用于处理缺失值(NaN)的重要工具。它允许用户将 DataFrame 或 Series 中的 NaN 值替换为指定的值,或者使用前向填充、后向填充等方式填充缺失值。fillna() 方法非常灵活,适用于各种数据清洗和预处理场景。

语法

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
参数说明
  • value: 用于填充缺失值的值或字典。可以是一个标量值、字典、Series 或 DataFrame。
  • method: 填充方法,可选值包括 backfillbfillpadffill 等。这些方法用于指定填充时的方向。
  • axis: 填充的轴方向,0'index' 表示按行填充,1'columns' 表示按列填充。
  • inplace: 如果为 True,则在原 DataFrame 或 Series 上进行填充,否则返回新的对象。
  • limit: 限制向前或向后填充的最大数量。
  • downcast: 可选的字典,指定向下转型操作(例如将浮点数转换为整数等)。

示例

下面我们通过一些示例来演示 fillna() 方法的用法。

1. 使用标量值填充
import pandas as pd
import numpy as np

# 创建含缺失值的 DataFrame
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [np.nan, 5, 6, np.nan],
    'C': [7, 8, 9, 10]
})

print("原始 DataFrame:")
print(df)

# 使用标量值 0 填充所有缺失值
df_filled = df.fillna(0)

print("\n使用 0 填充缺失值:")
print(df_filled)

输出

原始 DataFrame:
     A    B   C
0  1.0  NaN   7
1  2.0  5.0   8
2  NaN  6.0   9
3  4.0  NaN  10

使用 0 填充缺失值:
     A    B   C
0  1.0  0.0   7
1  2.0  5.0   8
2  0.0  6.0   9
3  4.0  0.0  10
2. 按列使用不同值填充

可以通过字典指定不同列使用不同的值进行填充。

# 使用字典指定不同列的填充值
df_filled_by_column = df.fillna({'A': 99, 'B': -99})

print("\n按列使用不同值填充缺失值:")
print(df_filled_by_column)

输出

按列使用不同值填充缺失值:
      A     B   C
0  1.0  -99.0   7
1  2.0   5.0   8
2  99.0   6.0   9
3  4.0  -99.0  10

在这个例子中,我们使用了一个字典 { 'A': 99, 'B': -99 } 来填充缺失值。这样,列 A 中的缺失值被替换为 99,而列 B 中的缺失值被替换为 -99。列 C 中没有缺失值,因此它保持不变。

3. 使用前向填充(ffill

fillna() 方法的 method 参数可以指定使用前向填充的方法,前向填充是将缺失值替换为前一个有效值。

# 创建含缺失值的 DataFrame
df_ffill = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [np.nan, 5, 6, np.nan],
})

print("\n原始 DataFrame:")
print(df_ffill)

# 使用前向填充
df_ffilled = df_ffill.fillna(method='ffill')

print("\n使用前向填充 (ffill):")
print(df_ffilled)

输出

原始 DataFrame:
     A    B
0  1.0  NaN
1  2.0  5.0
2  NaN  6.0
3  4.0  NaN

使用前向填充 (ffill):
     A    B
0  1.0  NaN
1  2.0  5.0
2  2.0  6.0
3  4.0  6.0

在这个例子中,缺失值在列 A 中被前面的值 2.0 替换,而列 B 的缺失值则使用 6.0 替换。而列 B 的缺失值在首处保留为 NaN,因为没有前面的值可以填充。

4. 使用后向填充(bfill

后向填充是将缺失值替换为后一个有效值。

# 使用后向填充
df_bfilled = df_ffill.fillna(method='bfill')

print("\n使用后向填充 (bfill):")
print(df_bfilled)

输出

使用后向填充 (bfill):
     A    B
0  1.0  5.0
1  2.0  5.0
2  4.0  6.0
3  4.0  NaN

在这个例子中,列 A 的缺失值在 2.0 后面被替换为 4.0,而列 B 的缺失值在末尾保留为 NaN,因为没有后续值可以填充。

5. 限制填充数量

可以通过 limit 参数限制填充的数量。

# 创建含缺失值的 DataFrame
df_limit = pd.DataFrame({
    'A': [1, 2, np.nan, np.nan],
    'B': [np.nan, np.nan, 6, np.nan],
})

print("\n原始 DataFrame:")
print(df_limit)

# 使用前向填充,限制最大填充数量为 1
df_limited_fill = df_limit.fillna(method='ffill', limit=1)

print("\n使用前向填充 (限制填充数量为 1):")
print(df_limited_fill)

输出

原始 DataFrame:
     A    B
0  1.0  NaN
1  2.0  NaN
2  NaN  6.0
3  NaN  NaN

使用前向填充 (限制填充数量为 1):
     A    B
0  1.0  NaN
1  2.0  NaN
2  2.0  6.0
3  NaN  NaN

在这个例子中,列 A 的第二个缺失值只被填充一次,第三个缺失值未被填充,因为填充的限制为 1。同样,对于列 B,第二个缺失值未填充,而最后一个缺失值也未填充。

6. 在原 DataFrame 上直接填充

如果希望直接在原 DataFrame 上填充而不是返回一个新的 DataFrame,可以将 inplace 设置为 True

# 直接在原 DataFrame 上使用填充
df_limit.fillna(0, inplace=True)

print("\n在原 DataFrame 上使用 0 填充缺失值:")
print(df_limit)

输出

在原 DataFrame 上使用 0 填充缺失值:
     A    B
0  1.0  0.0
1  2.0  0.0
2  0.0  6.0
3  0.0  0.0

在这个例子中,所有的缺失值都被 0 替代,并且这些更改直接反映在原始 DataFrame 中。

总结

fillna() 方法是处理缺失值的强大工具,它提供了多种方式来替换 NaN 值,包括使用固定值、使用前向或后向填充、限制填充的数量等。根据具体的数据处理需求,可以灵活地选择合适的方法来清洗缺失的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值