我有一系列字符串。我想做这样的事情:
for item in series:
if '!' in item:
series[item] = item.split('!')[0]
基本上,如果有'!'在字符串中,将其替换为'!'之前的部分。代码似乎根本没有改变系列。如何正确地进行条件替换?
答案 0 :(得分:5)
如果str.split
与indexing with str一起使用,我认为不需要条件:
s = pd.Series(['sss!dd','sdsd', 'aa!p'])
s = s.str.split('!').str[0]
0 sss
1 sdsd
2 aa
dtype: object
但如果需要条件添加mask
和str.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.replace
与regex=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