首页 > 解决方案 > 仅提取字母和第一个数字

问题描述

我正在使用包含字母、特殊字符和数字的数据框。我的目标是提取所有字母和第一个数字。所有数字总是出现在字母和特殊字符之后;但是,某些字母可能会出现在特殊字符之后。请参见下面的示例:

d = {'col1': ['A./B. 1234', 'CDEF/G5.','AB./C23']}
df = pd.DataFrame(data=d)
print(df)
#    col1
# 0  A./B. 1234
# 1  CDEF/G5.
# 2  AB./C23

我查找了许多变体,但我不知道如何处理特殊字符./等。

df.col1.str.extract('([A-Za-z\d]+)')
#    0
# 0  A
# 1  CDEF
# 2  AB

这给了我所有的字母和数字,直到它到达一个特殊字符。最终我想得到以下输出:

AB1
CDEFG5
ABC2

我是正则表达式的新手。

标签: pythonregexpandas

解决方案


您需要提取直到并包括第一个数字的所有字符,然后用空字符串替换任何非字母/数字字符:

d = {'col1': ['A./B. 1234', 'CDEF/G5.','AB./C23']}
df = pd.DataFrame(data=d)
df.col1.str.extract(r'^([^\d]+\d)').replace('[^A-Za-z0-9]', '', regex=True)

输出:

        0
0     AB1
1  CDEFG5
2    ABC2

推荐阅读