python pandas:如何避免链式赋值

Pyt*_*ous 6 python pandas

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

A value is trying to be set on a copy of a slice from a DataFrame.
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过使用.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
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 7

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

df.loc[df['x'] == 10, 'value'] = 1000
Run Code Online (Sandbox Code Playgroud)

所以一般形式是:

df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like>
Run Code Online (Sandbox Code Playgroud)

文档突出显示了错误,并且有介绍,鉴于某些函数文档很稀疏,请随意提交改进。