python熊猫:如何避免链式赋值

python熊猫:如何避免链式赋值,python,pandas,Python,Pandas,我有一个包含两列的数据框:x和value。 我想找到x==10的所有行,为所有这些行设置value=1000。我尝试了下面的代码,但得到警告 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=p

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

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
来确保您正在处理视图,在您的示例中,以下内容将起作用,并且不会发出警告:

df.loc[df['x'] == 10, 'value'] = 1000
因此,一般形式是:

df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like>
df.loc[,]=<新的标量值或类似数组>

突出显示了错误,还有一个问题,假设某些函数文档比较稀疏,请随意提交改进。

很抱歉,使用推荐的
df.loc[df['x']==10,'value']=1000有什么问题?
?谢谢,我没有意识到这是一个选项。也许只是我,也许是因为我太习惯SQL,也太不熟悉Pandas,但我仍然发现一些SQL中平淡无奇的任务在Pandas中很混乱,文档也不是很清楚,它们非常清楚,警告是要告诉你,你正在做的事情可能不起作用,我一点也不清楚。熊猫文档与商业产品(如Matlab)之间没有可比性。例如,如果您在文档中查找Pandas.DataFrame.loc,则语法解释非常简短。它指向按标签选择,但即使在那里我也找不到像你上面发布的那样的例子。有一个“与sql的比较”部分,但也没有您的示例,“更新”部分为空。PS如果您将其作为答案发布,我将接受它