根据条件更新pandas系列值

时间:2017-07-25 13:50:35

标签: python pandas

我有一系列字符串。我想做这样的事情:

for item in series:
    if '!' in item:
        series[item] = item.split('!')[0]

基本上,如果有'!'在字符串中,将其替换为'!'之前的部分。代码似乎根本没有改变系列。如何正确地进行条件替换?

3 个答案:

答案 0 :(得分:5)

如果str.splitindexing with str一起使用,我认为不需要条件:

s = pd.Series(['sss!dd','sdsd', 'aa!p'])

s = s.str.split('!').str[0]
0     sss
1    sdsd
2      aa
dtype: object

但如果需要条件添加maskstr.contains

s = s.mask(s.str.contains('!'), s.str.split('!').str[0])
print (s)
0     sss
1    sdsd
2      aa
dtype: object

答案 1 :(得分:4)

使用@ jezrael的数据集:

In [74]: s
Out[74]:
0    sss!dd
1      sdsd
2      aa!p
dtype: object

In [75]: s = s.str.replace(r'\!.*','')

In [76]: s
Out[76]:
0     sss
1    sdsd
2      aa
dtype: object

答案 2 :(得分:3)

选项1
您还可以将pd.Series.replaceregex=True参数

一起使用
s.replace('(.*)!.*', r'\1', regex=True)

0     sss
1    sdsd
2      aa
dtype: object

选项2
您可以使用numpy.core.defchararray.split

pd.Series(
    [x[0] for x in np.core.defchararray.split(s.values.astype(str), '!')],
    s.index
)

0     sss
1    sdsd
2      aa
dtype: object