You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从混合数据类型列中提取10位及以上长度的数字

混合类型列提取定长连续数字实现方案

问题根因

之前使用regex、lambda、apply/map时出现整列被识别为单个字符串的核心原因是Column2列混合了数值、字符串等多种数据类型,pandas做类型推断时未逐行按字符串处理,直接传参会触发类型适配异常。不需要使用split方法逐段切分,基于正则逐行扫描即可覆盖文本、数字混杂的场景。

实现逻辑

  • 第一步:将Column2列所有值统一强制转换为字符串类型,从根源解决混合类型导致的识别异常
  • 第二步:用正则规则\d{10,}逐行扫描文本,提取所有连续10位及以上的纯数字段,自动跳过普通文本、短数字、不符合长度要求的内容
  • 第三步:将匹配结果写入Column3列,无匹配内容的行返回空值

可直接运行的代码

import pandas as pd
import re

# 生成临时字符串列,统一类型避免识别异常
df['col2_tmp'] = df['Column2'].astype(str)

# 定义逐行提取规则
def extract_long_num(content):
    match_result = re.findall(r'\d{10,}', content)
    # 多匹配结果用逗号拼接,无匹配返回空字符串
    return ','.join(match_result) if match_result else ''

# 生成结果列
df['Column3'] = df['col2_tmp'].apply(extract_long_num)

# 清理临时列
df.drop(columns=['col2_tmp'], inplace=True)

自定义调整说明

  • 如果需要排除带小数点的数值里的数字段(比如不希望从3.14159265358979这类小数中提取长数字),可以将正则替换为r'(?<!\.)\d{10,}(?!\.)',仅匹配前后无小数点的连续长数字
  • 如果一行存在多个符合要求的长数字、且仅需要保留第一个匹配结果,将返回逻辑修改为return match_result[0] if match_result else ''即可
  • 如果需要空值为pandas标准缺失值格式,将无匹配时的返回值从空字符串''替换为pd.NA即可

内容的提问来源于stack exchange,提问作者ross jim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:03:04