簡體   English   中英

根據條件更新pandas系列值

[英]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

但是如果需要條件添加maskstr.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.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM