我有一个带有四列的 pandas 数据框。数据由字符串组成。样本:
A B C D
0 2 asicdsada v:cVccv u
1 4 ascccaiiidncll v:cVccv:ccvc u
2 9 sca V:c u
3 11 lkss v:cv u
4 13 lcoao v:ccv u
5 14 wuduakkk V:ccvcv: u
如果该行中的 Col C 包含子字符串“V”(区分大小写),我想将 D 列中的字符串“u”替换为字符串“a”。
期望的结果:
A B C D
0 2 asicdsada v:cVccv a
1 4 ascccaiiidncll v:cVccv:ccvc a
2 9 sca V:c a
3 11 lkss v:cv u
4 13 lcoao v:ccv u
5 14 wuduakkk V:ccvcv: a
我更喜欢覆盖 D 列中已有的值,而不是分配两个不同的值,因为我想稍后在不同的条件下选择性地再次覆盖其中一些值。
看起来这应该有一个简单的解决方案,但我无法弄清楚,并且无法在其他已回答的问题中找到完全适用的解决方案。
df.ix[1]["D"] = "a"
改变个体的价值。
df.ix[:]["C"].str.contains("V")
返回一系列布尔值,但我不确定如何处理它。我尝试过 .loc、apply、contains、re.search 和 for 循环的许多组合,但要么出现错误,要么替换 D 列中的每个值。我是 pandas/python 的新手,所以很难知道是否我的语法、方法或我需要做的事情的概念化都是错误的(可能是以上所有)。
正如您已经尝试过的那样,使用str.contains
得到一个布尔系列,然后使用.loc
说“更改这些行和 D 列”。例如:
In [5]: df.loc[df["C"].str.contains("V"), "D"] = "a"
In [6]: df
Out[6]:
A B C D
0 2 asicdsada v:cVccv a
1 4 ascccaiiidncll v:cVccv:ccvc a
2 9 sca V:c a
3 11 lkss v:cv u
4 13 lcoao v:ccv u
5 14 wuduakkk V:ccvcv: a
(避免使用.ix
-- 现在已正式弃用。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)