[英]Update pandas series value based on a condition
我有一系列的字符串。 我想做這樣的事情:
for item in series:
if '!' in item:
series[item] = item.split('!')[0]
基本上,如果有'!' 在字符串中,將其替換為'!'之前的部分。 代碼似乎根本沒有改變系列。 如何正確地進行條件替換?
我認為如果使用帶str索引的 str.split
,則不需要條件:
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
使用@ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.