我有一个包含多个列的数据框。其中之一是df['col1']由字母、特殊字符(. 或 _)和数字组成的字符串值。我想创建一个新列,返回索引 + 1 或第一个数字或 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 依此类推(如果是第一个数字的位置)。我也尝试使用 find、next 和 filter,但它们没有用。df['new_col'] = df['col1'].str.find(next(filter(str.isalpha, df['col1']))) + 1任何帮助,将不胜感激!
1 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
您可以使用 re.search
import re
df['col1'].apply(lambda x: re.search('\d+', x).start()) + 1
你得到
0 4
1 1
2 9
编辑:如果没有匹配项,re.search().start() 将抛出属性错误。这需要在条件下处理。由于 Pandas 将 NaN 解释为 float,因此结果位置将是 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
添加回答
举报
0/150
提交
取消