提问人:Pop23 提问时间:8/29/2023 最后编辑:Amira BedhiafiPop23 更新时间:8/29/2023 访问量:33
如何修复SettingWithCopyWarning?
How to fix SettingWithCopyWarning?
问:
我正在尝试在我的数据帧中创建一个新列并收到 SettingWithCopyWarning 错误。我已经在网站上查看了有关此的其他问题,但似乎无法解决我遇到的问题。
这是原始代码:
tcep['time_difference'] = (pd.to_datetime(tcep['time_end']) - pd.to_datetime(tcep['time_start'])).dt.days
当它出现错误时说:
尝试在 DataFrame 中的切片副本上设置值
我尝试了以下方法:
tcep['time_difference'] = tcep.apply(lambda row: ((pd.to_datetime(row.time_end) - pd.to_datetime(row.time_start)).days, axis=1)
但这也带来了同样的错误。有谁知道如何解决这个问题?
答:
0赞
Amira Bedhiafi
8/29/2023
#1
当您尝试在 df 上设置一个值时,该值可能是另一个 df 的视图(或切片),而不是副本,在 pandas 中会引发警告。这意味着您可以在不知不觉中更改原始数据帧。SettingWithCopyWarning
要确保它不是其他数据帧上的视图,您可以显式创建一个副本,然后按如下方式操作:tcep
tcep = tcep.copy()
tcep['time_difference'] = (pd.to_datetime(tcep['time_end']) - pd.to_datetime(tcep['time_start'])).dt.days
如果使用该方法,则代码中存在拼写错误。您缺少 lambda 函数的右括号:apply
tcep = tcep.copy()
tcep['time_difference'] = tcep.apply(lambda row: (pd.to_datetime(row.time_end) - pd.to_datetime(row.time_start)).days, axis=1)
评论