python Pandas : how to avoid chained assignment

标签 python pandas

我有一个包含两列的 pandas 数据框:x 和值。 我想找到 x == 10 的所有行,并为所有这些行设置值 = 1,000。我尝试了下面的代码,但收到警告

A value is trying to be set on a copy of a slice from a DataFrame.

我知道我可以通过使用 .loc 或 .ix 来避免这种情况,但我首先需要找到满足 x ==10 条件的所有行的位置或索引。有没有更直接的方法?

谢谢!

import numpy as np
import pandas as pd

df=pd.DataFrame()
df['x']=np.arange(10,14)
df['value']=np.arange(200,204)


print df

df[ df['x']== 10 ]['value'] = 1000 # this doesn't work

print df

最佳答案

您应该使用 loc 来确保您正在处理 View ,在您的示例中,以下内容将起作用并且不会引发警告:

df.loc[df['x'] == 10, 'value'] = 1000

所以一般形式是:

df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like>

docs突出显示错误并且有 intro , 授予一些功能文档稀疏,请随时提交改进。

关于 python Pandas : how to avoid chained assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357311/

相关文章:

python - 使用 Pandas 将字符串列表转换为虚拟变量

python - Pandas dataframe merge 的性能并不比附加到新列表更好

python - 在 Python 中使用 regionprops

python - 从一个列表列表中减去另一个列表列表

python - Pandas 通过多次和前向填充扩展日期范围

python - 成对相似度/相似度矩阵计算优化

python - 如何在另一个数据帧中查找数据帧(顺序很重要)?

python - 切片运算符何时在 Python 中创建浅拷贝?

python - Pygame 找不到所需的字体

c++ - 几乎相同的 C++ 和 Python 代码的执行时间差异很大