我有一個(gè)包含多個(gè)列的數(shù)據(jù)框。其中之一是df['col1']由字母、特殊字符(. 或 _)和數(shù)字組成的字符串值。我想創(chuàng)建一個(gè)新列,返回索引 + 1 或第一個(gè)數(shù)字或 alpha 的位置。我知道這不起作用,但類似于:df['new_col'] = df['col1'].apply(lambda x: re.search(r'\d', str(x))).str.startswith()以便col1 = abc12 returns 4, 33zxy returns 1, hi_world2 returns 9 依此類推(如果是第一個(gè)數(shù)字的位置)。我也嘗試使用 find、next 和 filter,但它們沒(méi)有用。df['new_col'] = df['col1'].str.find(next(filter(str.isalpha, df['col1']))) + 1任何幫助,將不勝感激!
1 回答

千萬(wàn)里不及你
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以使用 re.search
import re
df['col1'].apply(lambda x: re.search('\d+', x).start()) + 1
你得到
0 4
1 1
2 9
編輯:如果沒(méi)有匹配項(xiàng),re.search().start() 將拋出屬性錯(cuò)誤。這需要在條件下處理。由于 Pandas 將 NaN 解釋為 float,因此結(jié)果位置將是 float 類型
df = pd.DataFrame({'col1':['abc12', '33zxy', 'hi_world2','abc']})
df['col1'].apply(lambda x: re.search('\d+', x).start() if re.search('\d+', x) else re.search('\d+', x)) + 1
0 4.0
1 1.0
2 9.0
3 NaN
添加回答
舉報(bào)
0/150
提交
取消