当前位置: 首页 > ds >正文

【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 中特定值的方法。它可以用于替换单一值、多个值、使用正则表达式匹配替换,甚至可以结合插值方法进行填充。


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

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

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

🧪 示例代码及结果
示例 1:替换标量值(如 NaN)
import pandas as pd
import numpy as npdf = 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.0After replace(np.nan, 0):A  B
0  1  5
1  2  0
2  0  0
3  4  8

示例 2:替换多个值(列表形式)
# 将 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  5After replace([1, 3], 0):X  Y
0  0  0
1  2  4
2  0  5

示例 3:使用字典分别替换不同列
# 每列单独替换
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:使用正则表达式替换字符串
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    activeAfter replace with regex:Name     Status
0    Alice    enabled
1      Bob  inactive
2  Charlie    enabled

示例 5:使用 method='ffill' 进行前向填充
# 使用 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
# 限制每次最多替换 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
# 原地替换
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')✅ 推荐结合插值法替换缺失值

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

http://www.xdnf.cn/news/14116.html

相关文章:

  • 基于深度学习的智能视频分析系统:技术与实践
  • GO 1.25
  • 计算机网络笔记(四十)——6.3远程终端协议TELNET
  • 【学习笔记】重载和重写的注意事项
  • Java面试题021:一文深入了解微服务之网关Zuul
  • window 显示驱动开发-DirectX VA 2.0 的扩展支持
  • 《Deep Residual Learning for Image Recognition》(深度残差学习在图像识别中的应用)
  • SpringBoot深度解析:从核心原理到最佳实践
  • 用 HTML、CSS 和 JavaScript 实现五子棋人机对战游戏
  • uniapp-vue3-js-vite-pinia-eslint 快速开发模板
  • 初学时间复杂度
  • LSM树与B+树优缺点分析
  • C primer plus (第六版)第七章 编程练习第9题
  • uniapp中vue3 ,uview-plus使用!
  • 阿里云OSS
  • 使用 Higress AI 网关代理 vLLM 推理服务
  • el-tree-select 多选树形下拉框,实现当选中时,根据当前选择的对象,动态生成表单数据。
  • Go并发编程中的内存同步与竞态:从理论到实践
  • 使用Stone 3D免编码快速创建带AI数字人的数字空间
  • Day30 模块和库的导入
  • 安科瑞 ADW600 多回路电力计量模块:安装、通信与使用指南
  • 流编辑器sed
  • 深入理解 C++ const:九大用法解析 + 八大高频考点
  • android mvI架构梳理
  • M - 中位数
  • Android 实体键盘 设置默认布局
  • 【舞蹈】FineDance
  • 新一代python管理工具--uv
  • Rust 学习笔记1
  • 数字孪生系统汽车工厂生产异常监控的智能利器