【Pandas】pandas DataFrame replace

Pandas2.2 DataFrame

Missing data handling

方法 描述
DataFrame.fillna([value, method, axis, ...]) 用于填充 DataFrame 中的缺失值(NaN)
DataFrame.backfill(*[, axis, inplace, ...]) 用于**使用后向填充(即"下一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.bfill(*[, axis, inplace, limit, ...]) 用于**使用后向填充(即"下一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.dropna(*[, axis, how, thresh, ...]) 用于删除包含缺失值(NaN)的行或列的方法
DataFrame.ffill(*[, axis, inplace, limit, ...]) 用于**使用前向填充(即"前一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.interpolate([method, axis, limit, ...]) 用于对缺失值(NaN)进行插值填充的方法
DataFrame.isna() 用于检测 DataFrame 中缺失值(NaN)的位置的方法
DataFrame.isnull() 用于检测 DataFrame 中缺失值(NaN)的位置的方法
DataFrame.notna() 用于检测 DataFrame 中非缺失值(即不是 NaN)的位置的方法
DataFrame.notnull() 用于检测 DataFrame 中非缺失值(即不是 NaN)的位置的方法
DataFrame.pad(*[, axis, inplace, limit, ...]) 用于**使用前向填充(即"前一个有效观测值")来填补缺失值(NaN)**的方法
DataFrame.replace([to_replace, value, ...]) 用于替换 DataFrame 中特定值的方法

pandas.DataFrame.replace()

pandas.DataFrame.replace() 是一个用于替换 DataFrame 中特定值的方法。它可以用于替换单一值、多个值、使用正则表达式匹配替换,甚至可以结合插值方法进行填充。


📌 方法签名
python 复制代码
DataFrame.replace(to_replace=None, value=<no_default>, *, inplace=False, limit=None, regex=False, method=<no_default>)

🔧 参数说明
参数 类型 说明
to_replace scalar、list、dict、regex等 要被替换的值或模式;支持多种类型: - 标量:如 np.nan0 等 - 列表:如 [1, 2] - 字典:指定每列的替换规则 - 正则表达式(配合 regex=True
value scalar、list、dict 或 <no_default> 替换的目标值;如果未提供且 to_replace 是 dict,则忽略此参数
inplace bool,默认 False 是否在原对象上修改
limit int,可选 插值时最多连续替换的数量(仅当 method 不为 None 时有效)
regex bool,默认 False 是否将 to_replace 视为正则表达式处理
method {'pad', 'ffill', 'bfill', None} 插值方式,仅在 to_replaceNone 时生效

✅ 返回值
  • 返回一个新的 DataFrame,其中满足条件的值被替换;
  • 如果 inplace=True,则返回 None,原始数据被修改。

🧪 示例代码及结果
示例 1:替换标量值(如 NaN)
python 复制代码
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8]
})

print("Original DataFrame:")
print(df)

# 将 NaN 替换为 0
replaced_df = df.replace(np.nan, 0)
print("\nAfter replace(np.nan, 0):")
print(replaced_df)
输出结果:
复制代码
Original DataFrame:
     A    B
0  1.0  5.0
1  2.0  NaN
2  NaN  NaN
3  4.0  8.0

After replace(np.nan, 0):
   A  B
0  1  5
1  2  0
2  0  0
3  4  8

示例 2:替换多个值(列表形式)
python 复制代码
# 将 1 和 3 替换为 0
df_multi = pd.DataFrame({'X': [1, 2, 3], 'Y': [3, 4, 5]})
replaced_multi = df_multi.replace([1, 3], 0)

print("Original Multi-value DataFrame:")
print(df_multi)

print("\nAfter replace([1, 3], 0):")
print(replaced_multi)
输出结果:
复制代码
Original Multi-value DataFrame:
   X  Y
0  1  3
1  2  4
2  3  5

After replace([1, 3], 0):
   X  Y
0  0  0
1  2  4
2  0  5

示例 3:使用字典分别替换不同列
python 复制代码
# 每列单独替换
replace_dict = {'X': 1, 'Y': 3}
replaced_dict = df_multi.replace(replace_dict, 0)

print("\nAfter replace(dict):")
print(replaced_dict)
输出结果:
复制代码
After replace(dict):
   X  Y
0  0  0
1  2  4
2  3  5

示例 4:使用正则表达式替换字符串
python 复制代码
df_str = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Status': ['active', 'inactive', 'active']
})

# 将 'active' 替换为 'enabled'
replaced_regex = df_str.replace('active', 'enabled', regex=True)

print("Original String DataFrame:")
print(df_str)

print("\nAfter replace with regex:")
print(replaced_regex)
输出结果:
复制代码
Original String DataFrame:
      Name    Status
0    Alice    active
1      Bob  inactive
2  Charlie    active

After replace with regex:
      Name     Status
0    Alice    enabled
1      Bob  inactive
2  Charlie    enabled

示例 5:使用 method='ffill' 进行前向填充
python 复制代码
# 使用 ffill 填充 NaN
replaced_ffill = df.replace(np.nan, method='ffill')
print("\nAfter replace with method='ffill':")
print(replaced_ffill)
输出结果:
复制代码
After replace with method='ffill':
     A    B
0  1.0  5.0
1  2.0  5.0
2  2.0  5.0
3  4.0  8.0

示例 6:限制替换数量(limit=1
python 复制代码
# 限制每次最多替换 1 个 NaN
limited_replace = df.replace(np.nan, method='ffill', limit=1)
print("\nAfter replace with limit=1:")
print(limited_replace)
输出结果:
复制代码
After replace with limit=1:
     A    B
0  1.0  5.0
1  2.0  5.0
2  NaN  NaN
3  4.0  8.0

示例 7:原地修改(inplace=True
python 复制代码
# 原地替换
df.replace(np.nan, 0, inplace=True)
print("\nIn-place replace (modified original):")
print(df)
输出结果(基于示例 1 的数据):
复制代码
In-place replace (modified original):
   A  B
0  1  5
1  2  0
2  0  0
3  4  8

🧠 应用场景
场景 说明
缺失值替换 如替换 NaNNone
异常值修正 如将超出范围的数值替换为合理值
文本清洗 如统一状态字段名称(如 'active' → 'enabled'
多列定制化替换 使用字典对不同列设置不同的替换规则
链式调用中清理数据 df.replace(...).fillna(0)

⚠️ 注意事项
  • to_replace 可以是标量、列表、字典或正则表达式;
  • 若使用 regex=True,请确保 to_replace 是字符串格式;
  • method='ffill' / 'bfill' 适用于时间序列或趋势数据;
  • limit 控制连续替换的最大数量;
  • 推荐先查看数据分布再决定如何替换;
  • 仅对 NaN 生效(除非你显式传入其他值);
  • replace() 不会自动排序索引,建议先排序以获得预期效果。

✅ 总结对比
方法 是否推荐使用 说明
replace(value, new_value) ✅ 推荐 快速替换特定值
replace([v1, v2], new_value) ✅ 推荐 批量替换多个值
replace({col: val}, ...) ✅ 推荐 多列定制化替换
replace(..., regex=True) ✅ 推荐 支持正则表达式
replace(method='ffill') ✅ 推荐 结合插值法替换缺失值

你可以根据具体需求选择最适合的参数组合来清理和转换数据。

相关推荐
Python当打之年8 小时前
【62 Pandas+Pyecharts | 智联招聘大数据岗位数据分析可视化】
大数据·python·数据分析·pandas·数据可视化
一晌小贪欢14 小时前
【Python办公】使用pandas批量读取csv保存为Excel
python·excel·pandas·读取excel·python办公·excel转csv
仟濹1 天前
「pandas 与 numpy」数据分析与处理全流程【数据分析全栈攻略:爬虫+处理+可视化+报告】
大数据·python·数据分析·numpy·pandas
vvilkim2 天前
深入解析 Pandas 核心数据结构:Series 与 DataFrame
数据结构·pandas
liuweidong08022 天前
【Pandas】pandas DataFrame notna
pandas
pythonqiang93 天前
Pandas:你的数据分析瑞士军刀![特殊字符]✨
其他·数据挖掘·数据分析·pandas
一个天蝎座 白勺 程序猿4 天前
Python爬虫(53)Python爬虫数据清洗与分析实战:Pandas+Great Expectations构建可信数据管道
爬虫·python·pandas
vvilkim4 天前
全面掌握Pandas时间序列处理:从基础到实战
pandas
liuweidong08025 天前
【Pandas】pandas DataFrame ffill
pandas