You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame多列Replace方法不生效问题排查

解决Pandas中多列Replace操作未生效的问题

问题原因

你这段代码失效的核心原因是:df_g1[["列名列表"]]属于链式索引,Pandas无法保证它返回的是原DataFrame的视图还是副本。当你在这个返回结果上调用inplace=True时,修改只会作用于临时生成的副本,原DataFramedf_g1不会受到任何影响。

解决方案

方案1:直接赋值回原DataFrame的指定列

放弃inplace=True,将replace的结果直接赋值给原DataFrame的对应列,确保修改作用到原数据:

import numpy as np

target_cols = ["09-12-2013","14-09-2013","16-09-2013","18-09-2013","20-09-2013","22-09-2013"]
df_g1[target_cols] = df_g1[target_cols].replace(["Removed","removed"], np.NaN)

方案2:使用loc索引避免链式问题

用df.loc[:, 列名列表]明确指定操作的是原DataFrame的视图,再执行替换:

import numpy as np

target_cols = ["09-12-2013","14-09-2013","16-09-2013","18-09-2013","20-09-2013","22-09-2013"]
df_g1.loc[:, target_cols].replace(["Removed","removed"], np.NaN, inplace=True)

或者用赋值方式(推荐,避免inplace的潜在问题):

df_g1.loc[:, target_cols] = df_g1.loc[:, target_cols].replace(["Removed","removed"], np.NaN)

方案3:正则匹配统一处理大小写(可选)

如果需要匹配所有大小写变体(比如"REMOVED"、"Removed"等),可以用正则表达式简化代码:

import numpy as np
import re

target_cols = ["09-12-2013","14-09-2013","16-09-2013","18-09-2013","20-09-2013","22-09-2013"]
df_g1[target_cols] = df_g1[target_cols].replace(r'^removed$', np.NaN, regex=True, flags=re.IGNORECASE)

内容的提问来源于stack exchange,提问作者Pulkit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:00:15