尽管在数据帧上使用 .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

使用完全外连接合并两个数据帧在两个数据帧上没有获得关键列

dask分布式数据帧上的慢len函数

在 train_test_split 返回的数据上,熊猫“不再支持将列表喜欢传递给带有任何缺失标签的 .loc 或 []”

匹配不同数据帧上的多列并获得其他列作为结果

尽管使用了过滤器,但仍被 CORS 策略阻止