我在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
我想替换字符串' u'在Col D中用字符串' a'如果该行中的Col C包含子串' V' (区分大小写)。 期望的结果:
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的新手所以它'我很难知道我的语法,方法或我甚至需要做的概念化是否都是关闭的(可能都是以上所述)。
答案 0 :(得分:1)
正如您已经尝试过的那样,使用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
- 现在已经正式弃用。)