假設我在資料框 df 中有一個列 foo,它看起來像:
0 abc1
1 def
2 g3sse1
3 f32asd
我不想要最后的數字,如果有的話。
0 abc
1 def
2 g3sse
3 f32asd
像這樣。
我能做的最好的是:
df.foo[df['foo'].str[-1].str.isdigit()] = df['foo'].str[:-1]
這解決了這個問題,但是......我很好奇是否有更優雅的方式來做到這一點。我猜正則運算式不會讓它看起來更好,但我很感激任何想法!
uj5u.com熱心網友回復:
由于您的輸入僅包含尾隨數字,并且在這種情況下您不想使用正則運算式,您還可以使用rstrip和 python 的string模塊:
import string
df['foo_refined'] = df['foo'].str.rstrip(string.digits)
foo foo_refined
0 abc1 abc
1 def def
2 g3sse1 g3sse
3 f32asd f32asd
a = '12a'
>>> a.rstrip(string.digits)
'12a'
b = '12a2'
>>> b.rstrip(string.digits)
'12a'
c = '12a12x'
>>> c.rstrip(string.digits)
'12a12x'
d = '123'
>>> d.rstrip(string.digits)
''
以及對 的參考lstrip,如果在此背景關系中使用,它將按預期從開頭而不是結尾洗掉任何數字。
uj5u.com熱心網友回復:
你的解決方案很好。另一種選擇是:
df['foo_new'] = df['foo'].str.extract('(.*)\d$').fillna(df['foo'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420956.html
標籤:
