python - 使用Pandas Dataframe过滤功能后的SettingWithCopyWarning

标签 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

Pandas ==0.16.2

最佳答案

杰夫指出的问题是我正在制作 View 而不是数据框的副本。

这是我应该写的:

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

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

关于python - 使用Pandas Dataframe过滤功能后的SettingWithCopyWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175702/

相关文章:

Python:如果变量是 'int' 并且长度 >= 5,则继续

python - 你如何在 grpc 中管理数据库连接?

python - 从 Pandas 数据框中的列名中删除时间戳

pandas - 如何查找包含列表的系列元素?

python - 使用 bool 子索引更新数据框

python - 如何从时间序列数据中选择前 n 列而不是在 pandas 中使用 nlargest?

python - 列表有 str.join() 吗?

python - 下次打开时,如何在 PyQt5 QRadioButton 中将最后选中的项目存储为默认值?

python - PyQt4 使用小部件移动 QTableWidget 行

python - 匹配两个数据框以选择具有完全匹配的行项目的项目