【发布时间】:2015-11-28 04:58:14
【问题描述】:
我有一个带有两列的 pandas 数据框:x 和 value。 我想找到 x == 10 的所有行,并且为所有这些行设置 value = 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
【问题讨论】:
-
抱歉使用推荐的
df.loc[df['x'] == 10, 'value'] = 1000有什么问题? -
谢谢,我没有意识到这是一个选项。也许只是我,也许是因为我太习惯SQL,对Pandas太陌生,但我还是发现SQL中一些平庸的任务在pandas中是乱七八糟的,文档也不是很清楚
-
docs 非常清楚,警告是告诉你你正在做的事情可能不起作用
-
我觉得他们一点都不清楚。 pandas 文档与 Matlab 等商业产品的文档没有可比性。例如。如果您查找 Pandas.DataFrame.loc 的文档,语法的解释非常简短。它指向按标签选择,但即使在那里我也找不到像你上面发布的那样的例子。有一个“与 sql 比较”部分,但也没有您的示例,并且“更新”子部分为空。
-
PS,如果您将其作为答案发布,我会接受它