为什么我在我的Pandas数据框中得到一个“SettingWithCopyWarning”,我该如何修复它?

68de4m5k  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(128)

使用Pandas的SettingWithCopyWarning
在阅读了大量文档后,我继续遇到这个警告,包括警告链接:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
和下面的问题:
How to deal with SettingWithCopyWarning in Pandas
将Pandas列转换为DateTime
我正在学习Python,我很难让这个警告消息消失。我也在努力使用更小的假数据来复制这个问题,但我复制这个问题的失败尝试如下所示。
在这个小例子中,我没有得到SettingWithCopyWarning,但每次我尝试在完整的 Dataframe (具有30K模拟VIN和车辆数据)上运行相同的代码时,我都会得到SettingWithCopyWarning。我读过关于链式索引的文章,知道它有问题。不幸的是,我不明白什么时候链式索引会导致问题(即什么时候你会得到一个视图和一个副本,在我所包括的例子中,下面哪些符号实际上是链式索引?谢谢你对这个令人沮丧的主题的任何建议。

import pandas as pd

vin_dat = pd.DataFrame({'vin' : [1, 2, 3, 4, 5],
    'purchase_date' : ["2020-03-26", "2021-04-05", "2021-12-17", "2021-12-18", "2022-01-30"],
    'nvlw_end_date' : ["2023-03-26", "2024-04-05", "2024-12-17", "2024-12-18", "2025-01-30"] })

vin_dat.loc[:, ("purchase_date", "nvlw_end_date")] = vin_dat.loc[:, ("purchase_date", "nvlw_end_date")].copy().apply(pd.to_datetime)
# DeprecationWarning: In a future version, `df.iloc[:, i] = newvals` will attempt to set the values inplace instead of always setting a new array.

vin_dat[["purchase_date", "nvlw_end_date"]] = vin_dat[["purchase_date", "nvlw_end_date"]].apply(pd.to_datetime)
# This works without an error on this sample, but gives me a SettingWithCopyWarning on my larger dataset

vin_dat['purchase_date'] = vin_dat['purchase_date'].apply(pd.to_datetime) 
# This works without an error on this sample, but gives me a SettingWithCopyWarning on my larger dataset

vin_dat['nvlw_end_date'] = pd.to_datetime(vin_dat['nvlw_end_date'])
# This works without an error on this sample, but gives me a SettingWithCopyWarning on my larger dataset
uinbv5nw

uinbv5nw1#

不是一个真正的答案,但我需要使用这个空间来分享截图。我无法使用您向我指出的数据文件重现警告,请参阅:

我们是否使用相同的数据?相同的Pandas版本?

相关问题