pandas替换DataFrame字符串触发SettingWithCopyWarning问题咨询
问题成因
SettingWithCopyWarning警告的触发原因是你当前操作的merge_filtered并非独立的DataFrame对象,它是你从其他父级DataFrame通过切片、过滤等操作得到的派生对象。pandas无法判断你修改这个派生对象时,是否需要同步修改原父级DataFrame,因此抛出警告提醒你可能存在非预期的修改行为。你现在的代码能正常运行出结果,是因为当前你的操作对象恰好是切片副本而非视图,修改不会影响原父级DataFrame,符合你的预期,但如果后续切片逻辑变化,可能会出现不符合预期的修改结果。
解决方法
可以根据你的使用场景任选以下一种方案解决:
- 方案一:生成
merge_filtered时主动声明创建独立副本
找到你之前生成merge_filtered的代码,在过滤/切片操作末尾加上.copy(),示例:
修改后你原本的两行赋值代码不需要调整,也不会再触发警告。# 原代码类似 merge_filtered = 父DataFrame[过滤条件],改成如下写法 merge_filtered = 父DataFrame[过滤条件].copy() - 方案二:使用
.loc方式完成列赋值
按照警告提示的规范写法修改赋值代码,还可以把两行转换逻辑合并成一行更简洁:merge_filtered.loc[:, 'DATE'] = merge_filtered['DATE'].str.replace('-', '') + '000000' - 方案三:临时关闭该类警告(不推荐新手使用,容易隐藏实际的赋值逻辑问题)
在代码开头加入以下配置即可关闭警告:import pandas as pd pd.set_option('mode.chained_assignment', None)
内容的提问来源于stack exchange,提问作者gesgallar
相关产品推荐
相关产品推荐

