尽管在数据帧上使用 .loc 方法,但仍获得 SettingWithCopyWarning [重复]
Posted
技术标签:
【中文标题】尽管在数据帧上使用 .loc 方法,但仍获得 SettingWithCopyWarning [重复]【英文标题】:Getting SettingWithCopyWarning in spite of using .loc method on a dataframe [duplicate] 【发布时间】:2016-12-18 10:20:38 【问题描述】:我正在尝试修改数据框中的单个“单元格”。现在,修改有效,但我收到此警告:
In [131]: df.loc[df['Access date'] == '06/01/2016 00:35:34', 'Title'] = 'XXXXXXXX'
ipython:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
每 Pandas: Replacing column values in dataframe 我 am 使用 .loc
方法,但我收到此警告(我没有看到我应该在此处修改的数据框副本)
这个警告应该在这里发生吗?如果没有,我该如何禁用它?
更新
似乎df
是另一个数据帧的(弱引用)副本(使用.is_copy
检查)。
【问题讨论】:
我对 pandas 还不是很熟悉,你不想让df.loc[df['Access date'] == '06/01/2016 00:35:34'].loc['Title'] ='XXXXXX'
阻止警告吗? (当然,我不知道这是否符合您的要求)
您发布的线路没有问题。 df
可能是另一个 DataFrame 的一部分。你能查一下df.is_copy
吗?
它只是一个仅供参考的警告,代码仍然会运行。
我相信 OP 知道代码会运行,他的问题是为什么即使他使用推荐的分配方式来避免复制,也会发出有关复制的警告。 @LetMeSOThat4U 你能举一个你的数据框的例子,以便我们自己测试吗?
@LetMeSOThat4U 这就是问题所在。您通过从另一个 DataFrame 中获取切片来创建该 DataFrame。这个警告是警告你在b
中所做的更改不会反映在你用来构造b 的实际DataFrame 中。如果你不打算改变实际的DataFrame,设置b.is_copy = None
【参考方案1】:
警告中的该链接在以下部分详细解决了该问题:为什么使用链式索引时分配失败?
部分摘要:pandas 不保证在某些情况下对数组的内存处理,因此即使使用 .loc 的某些实现也会发出警告,告诉您这可能非常低效。
要关闭警告,您可以使用警告库并在您的 ipython 笔记本单元格中执行以下代码。
import warnings
warnings.catch_warnings()
warnings.simplefilter("ignore")
【讨论】:
以上是关于尽管在数据帧上使用 .loc 方法,但仍获得 SettingWithCopyWarning [重复]的主要内容,如果未能解决你的问题,请参考以下文章
尽管有几个 `try`-`catch` 块,但仍获得 UnhandledPromiseRejectionWarning
在 train_test_split 返回的数据上,熊猫“不再支持将列表喜欢传递给带有任何缺失标签的 .loc 或 []”