Python 3.x Pandas.to_datetime()试图在数据帧切片的副本上设置一个值

Python 3.x Pandas.to_datetime()试图在数据帧切片的副本上设置一个值,python-3.x,pandas,Python 3.x,Pandas,我没有在其他功能中收到此复制警告,也没有找到解决方法 这是我的密码: div_df.loc[:,"Ann.Date"] = pd.to_datetime(div_df.loc[:,"Ann.Date"], format='%d %b %Y') /volume1/homes/id/venv/lib/python3.8/site-packages/pandas/core/indexing.py:1843: SettingWithCopyWarning: A

我没有在其他功能中收到此复制警告,也没有找到解决方法

这是我的密码:

div_df.loc[:,"Ann.Date"] = pd.to_datetime(div_df.loc[:,"Ann.Date"], format='%d %b %Y')

/volume1/homes/id/venv/lib/python3.8/site-packages/pandas/core/indexing.py:1843: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.obj[item_labels[indexer[info_axis]]] = value
除以下情况外,我在任何地方都没有找到解决方案:

div_df.loc[:,"Ann.Date"] = pd.to_datetime(div_df.loc[:,"Ann.Date"], format='%d %b %Y', errors='coerce')

正如评论中的讨论所述,根本原因可能是您的数据帧
div_df
是从另一个数据帧的片段构建的。最常见的情况是,我们要么使用
.loc
或使用

现在,您已经使用了
.loc
,但仍然会遇到问题。因此,建议在创建数据帧时使用以下语法:

div_df = another_df[some_selection_mask].copy()
这里,您可能已经在基本df上指定了一些过滤条件,以便创建的最终df是该基本df的一个片段。或者,基本df已经是另一个df的切片。您可以使用
.copy()
而不指定
deep=True
,因为它是默认值。有关详细信息,请参阅

参数deep决定您想要查看(deep=False)还是复制 (深=真)。默认情况下,deep为True,因此可以忽略它以获取副本


我在评论中提到的SO页面,即提供了非常好的信息。我上面包含的网页对此主题有一个非常全面的信息和解决方案。

只需使用
df[“Date”]=pd.to_datetime(df[“Date”],格式=“%d%b%Y”)
@Ynjxsjmh我尝试过它,它是相同的警告:1:SettingWithCopyWarning:试图在数据帧切片的副本上设置值。请尝试使用.loc[row_indexer,col_indexer]=value,而不要查看文档中的警告:div_df[“Ann.Date”]=pd.to_datetime(div_df[“Ann.Date”],format='%d%b%Y'),使用.loc()通常是一种解决CopyWarning设置问题的解决方案,如果它仍然得到警告,无法想象为什么删除.loc可以解决这个问题。在您的例子中,可能您的div_df本身就是来自其他数据帧的切片的副本。您可能需要尝试复制它,例如div_df=另一个[some_selection_mask].copy()查看。最后一句:
这里的解决方案是复制df(),或者像以前一样使用loc。
Accepted@seabean再次感谢