pandas DataFrame列文本多数字提取(支持小数、逗号拼接输出)
Pandas文本列全量数字提取实现
原实现的核心缺陷
- 调用的
str.extract()方法仅返回正则匹配到的首个捕获组内容,无法抓取文本中出现的全部数字 - 原正则规则
(\d+)仅匹配连续整数,无法识别带小数点的数值,会遗漏类似60.5、30.5的带小数内容
正确实现步骤
- 调整匹配规则:使用
\d+(?:\.\d+)?作为提取正则,可同时兼容普通整数、带多位小数的数值 - 替换提取方法:改用
str.findall()逐行抓取所有符合规则的内容,每一行的返回结果为存储该行全部数字的列表 - 格式拼接:对每行提取到的数字列表,以英文逗号为分隔符拼接为目标格式的字符串
import pandas as pd df = pd.DataFrame({ 'input': [ 'Age is 55 and 5 years', 'Age is 58', 'Age is 60.5', 'Age is 12 and 5 years', 'Age is 30.5 and 2 years of service' ] }) # 生成符合要求的输出列 df['output'] = df['input'].str.findall(r'\d+(?:\.\d+)?').str.join(',')
匹配规则说明:上述正则的逻辑为「至少一位数字开头,后续可选匹配小数点加至少一位数字」,不会出现把“60.5”拆成“60”“5”两个独立数字的问题,适配日常文本中的数字书写格式。
执行上述代码后,output列逐行内容与期望输出完全一致:
55,5 58 60.5 12,5 30.5,2
内容的提问来源于stack exchange,提问作者Karthik chengalvarayan
相关产品推荐
相关产品推荐

