Python Pandas Dataframe提取字符串开头数字:解决多数字合并问题
仅提取字符串开头的数字,避免合并后续数字
需求:提取字符串开头的数字,现有数据示例:
column1 10units 200 mg 4000units/40mg 40 units
使用以下代码时,含多个数字的单元格会把所有数字合并,其余结果正常:
df['newcolumn'] = df['column1'].astype('str').str.extractall('(\d+)').unstack().fillna('').sum(axis=1).astype(int)
当前输出:
newcolumn 10 200 400040 40
期望输出(仅保留开头数字):
newcolumn 10 200 4000 40
修正方案
原代码用extractall会匹配字符串中所有数字,导致后续数字被合并。改用str.extract配合锚定字符串开头的正则表达式,仅提取起始位置的连续数字:
df['newcolumn'] = df['column1'].astype('str').str.extract('^(\d+)').astype(int)
说明:
^是正则锚点,限定匹配必须从字符串开头开始(\d+)匹配一段连续的数字序列str.extract只会提取第一个匹配结果(也就是开头的数字),无需额外的unstack或求和操作
运行修正后的代码,即可得到符合预期的输出,不会合并后续出现的数字。
内容的提问来源于stack exchange,提问作者Ziggy
相关产品推荐
相关产品推荐

