尝试 .loc 后的熊猫 SettingWithCopyWarning

Posted

技术标签:

【中文标题】尝试 .loc 后的熊猫 SettingWithCopyWarning【英文标题】:pandas SettingWithCopyWarning after trying .loc 【发布时间】:2016-07-03 19:41:41 【问题描述】:

首先,我构建了一个新的 DataFrame 框架。然后通过从框架中过滤一些数据来创建一个新的框架2​​。现在我想给 frame2 赋值:

import numpy as np
from pandas import DataFrame

frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'], columns=['Ohio', 'Texas', 'California'])
mask = frame['Texas'] > 1
print frame[mask]
frame2 = frame.loc[mask]
frame2.loc['c', 'Ohio'] = 'me'
print frame2

但我收到了这个警告:

C:\Python27\lib\site-packages\pandas\core\indexing.py:461: 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

尽管我使用了推荐的 .loc 语法,为什么我仍然收到此警告?我应该怎么做才能避免这个警告?

【问题讨论】:

看来我在***.com/questions/23688307/… 找到了一种可能的解决方案。有人有其他好主意吗? 你在这里的意图是什么?您要更新副本还是原始 df @EdChum 我想更新副本。 【参考方案1】:

变化

frame2 = frame.loc[mask]

frame2 = frame.loc[mask].copy()

消除此警告。

【讨论】:

以上是关于尝试 .loc 后的熊猫 SettingWithCopyWarning的主要内容,如果未能解决你的问题,请参考以下文章

KeyError:在熊猫中尝试使用.loc方法将布尔列值更改为字符串时

Python:熊猫系列 - 为啥使用 loc?

大熊猫中的“iloc”和“loc”是啥?

熊猫数据框列计算

如何在熊猫中分组、循环和获取结果作为数据框

python [熊猫] .iloc和.loc