我的代码的目标是用过滤版本覆盖数据框。以下代码返回以下警告:
代码:
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
答案 0 :(得分:2)
Jeff指出的问题是我的观点不是数据框的副本。
这是我应该写的:
df = df [df.col> 1] .copy(deep = True)
df.col2 = df.col2.astype(float)