【问题标题】:Python/Pandas: How do I replace specific values of a Pandas Data Frame based on individual id?Python/Pandas:如何根据个人 id 替换 Pandas 数据框的特定值?
【发布时间】:2021-09-17 13:42:20
【问题描述】:

我有一个很长的 Pandas 数据集,其中包含一个名为 'id' 的列和另一个名为 'species' 的列,以及其他列。我必须根据'id' 列的特定值对'species' 列进行更改。

例如,如果'id''5555555'(作为字符串),那么我希望'species' 值将其当前值'dove'(也是字符串)更改为'hummingbird'。到目前为止我一直在使用的方法:

df.loc[df["id"] == '5555555', "species"] = 'hummingbird'

这是简短的示例数据框:

import pandas as pd
        
#Starting dataset
d = {'id': ['11111111', '22222222', '33333333', '44444444', '55555555', '66666666', '77777777', '88888888'], 'species': ['dove', 'dove', 'dove', 'hummingbird', 'hummingbird', 'dove', 'hummingbird', 'dove']}
df = pd.DataFrame(data=d)
df
    
    id          species
0   11111111    dove
1   22222222    dove        #wants to replace
2   33333333    dove        #wants to replace
3   44444444    hummingbird
4   55555555    hummingbird
5   66666666    dove
6   77777777    hummingbird
7   88888888    dove        #wants to replace        
     
#Expected outcome
d = {'id': ['11111111', '22222222', '33333333', '44444444', '55555555', '66666666', '77777777', '88888888'], 'species': ['dove', 'hummingbird', 'hummingbird', 'hummingbird', 'hummingbird', 'dove', 'hummingbird', 'hummingbird']}
df = pd.DataFrame(data=d)
df
    
    id          species
0   11111111    dove
1   22222222    hummingbird #replaced
2   33333333    hummingbird #replaced
3   44444444    hummingbird
4   55555555    hummingbird
5   66666666    dove
6   77777777    hummingbird
7   88888888    hummingbird #replaced

这对于少量的行来说是可以的,但是我必须对大约 1000 行执行此操作,每个行都有单独的 'id',所以我认为可能是一个循环,我可以将'id' 的列表提供给它,但是老实说,我什至不知道如何开始。

提前致谢!!

感谢 Scott Boston 为我指出正确的方向以提出更好的问题!

【问题讨论】:

  • 请添加具有预期输出的示例数据集
  • 会做的,谢谢你的建议!
  • 为什么2222和3333变了,1111没有变?
  • 好的...对于这个问题,最好创建一个小型玩具数据集和一个要更改的 id 列表以及要更改的值。您在这里提出的问题非常广泛,因此您没有当前的答案。我怀疑您要完成的工作非常简单,只是我们不确定您的输入或预期输出是什么。请参阅此post 以帮助您。
  • @ScottBoston 非常感谢您为我指出正确的方向以提出更好的问题!我相信随着时间的推移我会变得更好,但我希望这个新版本的问题可以阐明我想要完成的工作。

标签: python pandas dataframe loops replace


【解决方案1】:

使用isin

humming_ids = [44444444, 5555555, 88888888]
df.loc[df.id.isin(humming_ids), "species"] = 'hummingbird'

【讨论】:

  • 非常感谢@Vishnudev!这很好用。我还想提一下,我将您的答案与另一篇帖子 (stackoverflow.com/questions/41768196/…) 的答案结合在一起,因为我还需要从 excel 表中提取 id,然后将它们转换为 python 列表以使用您的答案。你不知道这对我有多大帮助!
  • 很高兴它有帮助:)
猜你喜欢
  • 2019-12-05
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 2014-09-06
  • 2016-10-08
  • 2021-02-26
相关资源
最近更新 更多