【问题标题】:How to set row value in pandas dataframe?如何在熊猫数据框中设置行值?
【发布时间】:2015-02-02 05:02:33
【问题描述】:

我需要将每个组的列的第一行的值设置为 False。

start_ix = group.head(1).index

print(start_ix)

Int64Index([20], dtype='int64')

print df.iloc[start_ix]['start']

20 错误

名称:开始,数据类型:bool

df.iloc[start_ix]['start'] = True

但在检查 DataFrame 时,该值仍为 False

【问题讨论】:

  • 试试df.ix[start_ix,'start'] = True
  • @EdChum 谢谢,那行得通;你会发布一个带有解释的答案吗?我还不明白。

标签: python pandas


【解决方案1】:

所以基本上你尝试的是所谓的链式索引,可能会也可能不会:

df.iloc[start_ix]['start'] = True

将其视为链接函数调用可能会有所帮助,这里的问题是,有时它会返回一个您想要的视图,但有时它会返回一个副本,导致原始 df 没有变化。

所以你应该使用ix,它允许你通过整数值(或标签)明确索引,然后指定你想要设置数据的列标签:

df.ix[start_ix,'start'] = True

docs 详细介绍了推荐的方法,通常当您设置潜在副本的值但它无法捕获所有实例时会引发警告。

更新

由于版本0.20.0 ix 已被loc 弃用,因此上述变为

df.loc[start_ix,'start'] = True

【讨论】:

  • 我认为当我尝试更改组上的值而不是数据框时发生错误。我现在看到它也适用于我访问数据框的方式,谢谢
  • Starting in 0.20.0, the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers.ix-indexer-is-deprecated
  • @ShiheZhang 肯定会更新,请注意,我在 3 年前回答了这个问题,而且我已经回答了很多 pandas 问题,所以会有很多答案可以不同或最新版本不支持
  • 不要私信,只是提一下,以防其他人稍后搜索此答案。
  • @ShiheZhang 我没有问题,我总是在出现提示时更新我的​​答案,尤其是当有更好的方法时,只是指出pandas 变化特别快
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2016-11-08
  • 2022-07-18
相关资源
最近更新 更多