我有一系列的字符串。我想做這樣的事情:基於條件更新熊貓系列值
for item in series:
if '!' in item:
series[item] = item.split('!')[0]
基本上,如果有'!'在字符串中,將其替換爲'!'之前的部分。代碼似乎並沒有改變系列。如何正確地進行條件替換?
我有一系列的字符串。我想做這樣的事情:基於條件更新熊貓系列值
for item in series:
if '!' in item:
series[item] = item.split('!')[0]
基本上,如果有'!'在字符串中,將其替換爲'!'之前的部分。代碼似乎並沒有改變系列。如何正確地進行條件替換?
我覺得條件不是必要的,如果使用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
使用set @ 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
選項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
我還需要剝去就地尾隨空間的他們。? – user2559578
如有必要,使用's = s.str.strip()。str.split('!')。str [0]'。 – jezrael