使用Pandas Dataframe过滤器功能后SettingWithCopyWarning

时间:2015-10-16 16:53:31

标签: python pandas

我的代码的目标是用过滤版本覆盖数据框。以下代码返回以下警告:

代码:

df = df[df.col>1]

df.col2 = df.col2.astype(float)

错误:

/root/.virtualenvs/data_tools/local/lib/python2.7/site-packages/pandas/core/generic.py:2177: 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

理论:

错误发生在第二行,但只有在先前运行第一行时才会发生。我相信第一行是创建一个与原始名称相同的df副本,然后导致错误。我无法理解为什么。

模块版本:

numpy的== 1.10.1

大熊猫== 0.16.2

1 个答案:

答案 0 :(得分:2)

Jeff指出的问题是我的观点不是数据框的副本。

这是我应该写的:

df = df [df.col> 1] .copy(deep = True)

df.col2 = df.col2.astype(float)