在Pandas DataFrame中为范围分配值

6
我有一个初学者的问题。我想给Pandas DataFrame定义的切片赋值,但是我无法从警告信息中找到正确的方法来解决这个错误。
错误信息: 设置副本数据框的切片的值 SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 我的代码失败了:
df.ix[0]["points"] = 1
df.ix[1:2]["points"] = 2
df.ix[3:8]["points"] = 3

这个怎么做才合适呢?
更新:
如下 @Delforge 的评论,以下方法可行:
df.loc[0, ("points")] = 1
df.loc[1:2, ("points")] = 2

你能提供样例输入和输出表格吗? - jgloves
7
尝试使用pd.DataFrame.loc。例如:df.loc[1:2, ("points")] = 2。 (翻译说明:尽可能地翻译原文,使其更加通俗易懂,但不改变原来的意思,并且不添加解释或其他无关内容。) - Delforge
请注意,当您提供与索引类型不兼容(或无法转换)的切片器时,.loc 是严格的。例如,在 DatetimeIndex 中使用整数。这些将引发 TypeError。http://pandas.pydata.org/pandas-docs/stable/indexing.html - jgloves
@Delforge的回答解决了问题!我没有从文档中正确地找到那个语法。 - mattiasostmar
2
@Delforge 应该被提升为一个回答。 - Andy Hayden
1个回答

6

此外,请参见 http://pandas.pydata.org/pandas-docs/version/0.15.2/indexing.html#returning-a-view-versus-a-copy 了解有关为什么出现错误的信息。 - jgloves
能否提供您的数据框架的示例,这将非常有帮助。 - jgloves
此外,当我在一个带有“points”列的数据框上尝试我的代码时,它能够正常工作,所以可能是您正在使用的Pandas版本的问题(我正在使用0.17.0)。但很高兴看到你找到了解决方案! - jgloves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接