如何解决Pandas中的SettingWithCopyWarning告警?
解决DataFrame创建新列时的SettingWithCopyWarning告警
这个警告的核心原因是:你当前操作的tcep不是原始DataFrame,而是从其他DataFrame切片得到的视图/副本,pandas无法确定你要修改的是副本还是原数据,因此抛出警告。
以下是几种有效的解决方法:
方法一:创建
tcep时显式生成副本
如果tcep是通过类似df[df['condition']]这种切片方式得到的,在创建时就加上.copy(),明确生成独立副本:# 示例:替换你原来创建tcep的代码 tcep = 原DataFrame[筛选条件].copy()之后再执行添加新列的代码,就不会触发警告了。
方法二:用
.loc明确指定赋值范围
不需要修改tcep的创建代码,直接用loc[:, 列名]的方式赋值,明确告诉pandas要修改的是整个列:tcep.loc[:, 'time_difference'] = (pd.to_datetime(tcep['time_end']) - pd.to_datetime(tcep['time_start'])).dt.days修正你尝试的
apply代码(不推荐,效率低)
你之前的apply代码存在语法错误,修正后结合.loc使用也能解决警告,但apply的运算效率远低于向量运算,仅作参考:tcep.loc[:, 'time_difference'] = tcep.apply(lambda row: (pd.to_datetime(row.time_end) - pd.to_datetime(row.time_start)).days, axis=1)
验证问题根源:可以通过以下代码确认tcep是否为视图:
print(tcep._is_view)
如果输出True,说明tcep是原DataFrame的视图,这就是触发警告的直接原因。
内容的提问来源于stack exchange,提问作者Pop23
相关产品推荐
相关产品推荐

