【发布时间】: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