【问题标题】:Assign values to ranges in Pandas DataFrame为 Pandas DataFrame 中的范围赋值
【发布时间】:2019-04-17 20:21:23
【问题描述】:

菜鸟问题。我想为 Pandas DataFrame 的已定义切片分配一个值,但我无法从警告文本中找出错误消息指向如何正确执行此操作。

错误信息: SettingWithCopyWarning: 正在尝试在 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 cmets,以下工作:

df.loc[0, ("points")] = 1
df.loc[1:2, ("points")] = 2

【问题讨论】:

  • 您能提供示例输入和输出表吗?
  • 尝试使用pd.DataFrame.loc。示例:df.loc[1:2, ("points")] = 2
  • 请注意,当您呈现与索引类型不兼容(或可转换)的切片器时,.loc 是严格的。例如在 DatetimeIndex 中使用整数。这些将引发 TypeError。 pandas.pydata.org/pandas-docs/stable/indexing.html
  • @Delforge 的回答成功了!我没有从文档中找到正确的语法。
  • @Delforge 应该被提升为答案

标签: python pandas


【解决方案1】:

我认为你不需要 .ix

试试

df["points"][0] = 1
df["points"][1:2] = 2

等等

http://pandas.pydata.org/pandas-docs/stable/indexing.html

【讨论】:

  • 另外,请参阅pandas.pydata.org/pandas-docs/version/0.15.2/…,了解您收到错误的原因。
  • 查看您的数据框示例会很有帮助。
  • 另外,当我在带有“points”列的数据框上尝试我的代码时,它可以工作,所以这可能是你使用的 Pandas 版本的问题(我使用的是 0.17. 0)。不过,很高兴看到您找到了解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2015-07-19
  • 2021-08-27
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多