mrk*_*goh 2 python 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 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
Run Code Online (Sandbox Code Playgroud)
除了以下之外,我还没有找到其他解决方案:
div_df.loc[:,"Ann.Date"] = pd.to_datetime(div_df.loc[:,"Ann.Date"], format='%d %b %Y', errors='coerce')
Run Code Online (Sandbox Code Playgroud)
正如评论中的讨论中提到的,根本原因可能是您的数据帧div_df是从另一个数据帧的切片构建的。最常见的是,我们要么通过使用来解决这种SettingWithCopyWarning问题,.loc要么使用.copy()
现在,您已经使用了.loc,但仍然遇到问题。.copy()因此,建议在创建 dataframe 时使用div_df,语法如下:
div_df = another_df[some_selection_mask].copy()
Run Code Online (Sandbox Code Playgroud)
在这里,您可能已经在基础 df 上指定了一些过滤条件,以便最终创建的 df 是该基础 df 的切片。或者,基础 df 已经是另一个 df 的切片。您.copy()无需指定即可使用deep=True,因为它是默认值。您可以参考此网页以获取更多信息。
参数 deep 决定您是否需要视图(deep=False)或复制(deep=True)。deep 默认为 True,因此您可以省略它来获取副本
我在评论中提到的 SO 页面,即这篇文章提供了非常好的信息。我上面包含的网页提供了有关该主题的非常全面的信息和解决方案。
| 归档时间: |
|
| 查看次数: |
3350 次 |
| 最近记录: |