我有一个包含两列的 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>
关于 python Pandas : how to avoid chained assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357311/