2015-09-02 71 views
5

我有一个有两列的熊猫数据框:x和值。 我想找到所有的行,其中x == 10,并为所有这些行设置值= 1,000。我想下面的代码,但我得到的python pandas:如何避免链接赋值

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 
+2

对不起,使用推荐的'df.loc [df ['x'] == 10,'value'] = 1000'有什么问题? – EdChum

+1

谢谢,我没有意识到这是一个选项。也许这只是我自己,也许是因为我太习惯SQL了,对熊猫来说太新了,但是我仍然发现一些SQL中平庸的任务在熊猫中很麻烦,文档不是很清楚 –

+0

[docs] (http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy)非常清晰,并且警告会告诉你,你正在做的事可能不起作用 – EdChum

回答

3

您应该使用loc,以确保您在视图中工作,在你的例子下面的工作,而不是提出一个警告:

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

所以一般形式是:

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

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