【问题标题】:Pandas set row values on dataframe subset熊猫在数据框子集上设置行值
【发布时间】:2015-11-16 17:07:28
【问题描述】:

我的 MWE 如下所示:

import pandas as pd
test = pd.DataFrame({'A':['a','b'], 'B':['c','d']})

如果 A 列中的相应值等于“a”,我想用字符串替换 B 列中的值。我尝试了一些方法:

In [27]: test[test['A']=='a']['B'] = 'REPLACEMENT'

In [28]: test
Out[28]:
   A  B
0  a  c
1  b  d

和:

In [30]: test.ix[test['A']=='a','B'].values.fill('REPLACEMENT')

In [31]: test
Out[31]:
   A  B
0  a  c
1  b  d

它们似乎都不起作用。如何实现?

【问题讨论】:

  • 在您的 [27] 命令警告您做错了什么并指出解决方案后,您应该收到一条错误消息。你用的是什么版本的熊猫?
  • 我做到了,我可能错误地忽略了它 - 我只是在展示我的逻辑。我正在使用 16.2。
  • 错误消息描述了问题,推荐了解决方案,并提供了 URL 以进行长时间讨论,该 URL 解释了解决方案发生了什么以及为什么使用链式索引进行分配不起作用。值得一读。

标签: python pandas dataframe subset


【解决方案1】:
In [64]:
test.B.loc[test.A == 'a'] = 'Replacement'
test
Out[64]:
    A   B
0   a   Replacement
1   b   d

【讨论】:

  • 这可行,但我收到警告:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame,这值得关注吗?
  • 好的没问题,试试用test.B.loc[test.A == 'a'] = 'Replacement'
猜你喜欢
  • 2023-03-13
  • 2016-03-28
  • 2015-02-02
  • 2018-11-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多