我有一个熊猫数据框架,其中有一列包含一系列相关(所有浮动值)。我正在尝试创建另一篇专栏文章,将这些关联分为三个不同的类别(高/中/低)。我使用np.where进行此操作:
df['Category'] = np.where(df['Correlation'] >= 0.5, 'high',
np.where(data['Correlation'] >= 0.3, 'medium','low'))当我尝试这样做的时候,我总是会得到SettingWithCopyWarning (虽然它看起来很有效)。我已经阅读了副本和视图之间的区别,甚至看到了使用.where而不是其他方法以避免任何混淆(和SettingWithCopyWarning)的建议。我还是不太明白为什么我用这种方法得到警告,有人能解释一下吗?
发布于 2022-05-17 05:24:55
您的df很可能是作为另一个视图创建的,例如:
data = pd.DataFrame({'Correlation': np.arange(0, 1.3, 0.1)}) # Your "initial" DataFrame
df = data.iloc[0:11]现在df保存了一些数据片段,但是它使用数据的数据缓冲区。
那么,如果您试图运行:
df['Category'] = np.where(df['Correlation'] >= 0.5, 'high',
np.where(df['Correlation'] >= 0.3, 'medium', 'low'))就发生了上述警告。
要摆脱它,将df创建为独立的 DataFrame,例如:
df = data.iloc[0:11].copy()现在df使用它自己的数据缓冲区,您可以随意使用它,包括添加新列。
要检查df是否使用自己的数据缓冲区,请运行:
df._is_view在您的原始环境中(没有我的更正),您应该是False,但是在您使用.copy()创建了df之后,您应该得到True。
https://stackoverflow.com/questions/72263192
复制相似问题