我有一个带有两列的pandas数据框:x和value。我想查找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以确保您正在使用视图,在您的示例中以下内容将起作用并且不会发出警告:
loc
df.loc[df['x'] == 10, 'value'] = 1000
因此,一般形式为:
df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like>
该文档突出显示了错误,并提供了简介,如果其中一些功能文档稀疏,请随时提交改进。