首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫SettingWithCopyWarning与np.where

熊猫SettingWithCopyWarning与np.where
EN

Stack Overflow用户
提问于 2022-05-16 17:20:43
回答 1查看 67关注 0票数 0

我有一个熊猫数据框架,其中有一列包含一系列相关(所有浮动值)。我正在尝试创建另一篇专栏文章,将这些关联分为三个不同的类别(高/中/低)。我使用np.where进行此操作:

代码语言:javascript
复制
df['Category'] = np.where(df['Correlation'] >= 0.5, 'high', 
                                   np.where(data['Correlation'] >= 0.3, 'medium','low'))

当我尝试这样做的时候,我总是会得到SettingWithCopyWarning (虽然它看起来很有效)。我已经阅读了副本和视图之间的区别,甚至看到了使用.where而不是其他方法以避免任何混淆(和SettingWithCopyWarning)的建议。我还是不太明白为什么我用这种方法得到警告,有人能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-17 05:24:55

您的df很可能是作为另一个视图创建的,例如:

代码语言:javascript
复制
data = pd.DataFrame({'Correlation': np.arange(0, 1.3, 0.1)})  # Your "initial" DataFrame
df = data.iloc[0:11]

现在df保存了一些数据片段,但是它使用数据的数据缓冲区。

那么,如果您试图运行:

代码语言:javascript
复制
df['Category'] = np.where(df['Correlation'] >= 0.5, 'high',
    np.where(df['Correlation'] >= 0.3, 'medium', 'low'))

就发生了上述警告。

要摆脱它,将df创建为独立的 DataFrame,例如:

代码语言:javascript
复制
df = data.iloc[0:11].copy()

现在df使用它自己的数据缓冲区,您可以随意使用它,包括添加新列。

要检查df是否使用自己的数据缓冲区,请运行:

代码语言:javascript
复制
df._is_view

在您的原始环境中(没有我的更正),您应该是False,但是在您使用.copy()创建了df之后,您应该得到True。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72263192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档