【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') ✅ 推荐 结合插值法替换缺失值

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

相关推荐
gCode Teacher 格码致知7 小时前
Pandas教学-6:coerce详解
python·pandas
benchmark_cc14 小时前
策略临时需要一批股票的最新价格,先查行情还是先建股票池?——从量化策略执行逻辑看数据获取顺序
python·数据分析·pandas·量化交易·股票数据·quantdash
2601_966949651 天前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
szephyr2 天前
用 Python 写自动化脚本:定时任务、文件批处理、自动出报表
python·自动化·pandas·脚本·定时任务
智购科技无人售货机工厂6 天前
2026自动售货机AI智能体架构:从47个小模型到33.7亿Token的工程实践~YH
android·人工智能·驱动开发·单片机·pandas
小葱炖豆腐6 天前
python绘制excel折线图
python·excel·numpy·pandas·matplotlib
七灵微6 天前
【AI】代码实战- 基于时间序列的轴承检测1
人工智能·机器学习·ai·pandas·matplotlib
2601_966949657 天前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_966949657 天前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
weixin199701080168 天前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas