返回数据帧中字符串中第一个数字/字母的索引/位置

2024-04-23 21:09:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列的数据框架。其中之一是df['col1'],字符串值由字母、特殊字符(.or_)和数字组成。我想创建一个新列,返回索引+1或第一个数字或字母的位置

我知道这不起作用,但类似于:

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 

依此类推(如果是第一个数字的位置)

我还尝试了find、next和filter,但都不起作用

df['new_col'] = df['col1'].str.find(next(filter(str.isalpha, df['col1']))) + 1

任何帮助都将不胜感激


Tags: 数据字符串框架dfnew字母数字col
1条回答
网友
1楼 · 发布于 2024-04-23 21:09:15

您可以使用搜索

import re
df['col1'].apply(lambda x: re.search('\d+', x).start()) + 1

你得到

0    4
1    1
2    9

编辑:如果没有匹配项,re.search().start()将抛出属性错误。这需要妥善处理。由于Pandas将NaN解释为浮动,因此产生的位置将为浮动类型

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

相关问题 更多 >