lar*_*cat 5 python apply pandas
我有一个带有四列的 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
Run Code Online (Sandbox Code Playgroud)
如果该行中的 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
Run Code Online (Sandbox Code Playgroud)
我更喜欢覆盖 D 列中已有的值,而不是分配两个不同的值,因为我想稍后在不同的条件下选择性地再次覆盖其中一些值。
看起来这应该有一个简单的解决方案,但我无法弄清楚,并且无法在其他已回答的问题中找到完全适用的解决方案。
df.ix[1]["D"] = "a"
Run Code Online (Sandbox Code Playgroud)
改变个体的价值。
df.ix[:]["C"].str.contains("V")
Run Code Online (Sandbox Code Playgroud)
返回一系列布尔值,但我不确定如何处理它。我尝试过 .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
Run Code Online (Sandbox Code Playgroud)
(避免使用.ix——它现在已被正式弃用。)