【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_replace | scalar、list、dict、regex等 | 要被替换的值或模式;支持多种类型: - 标量:如 np.nan 、0 等- 列表:如 [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_replace 为 None 时生效 |
✅ 返回值
- 返回一个新的
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
🧠 应用场景
场景 | 说明 |
---|---|
缺失值替换 | 如替换 NaN 、None 等 |
异常值修正 | 如将超出范围的数值替换为合理值 |
文本清洗 | 如统一状态字段名称(如 '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') | ✅ 推荐 | 结合插值法替换缺失值 |
你可以根据具体需求选择最适合的参数组合来清理和转换数据。