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

pandas使用str.extract()返回空DataFrame问题求解

问题根因

你当前用str.extract()返回空的核心原因是:str访问器仅适用于Pandas Series中存储字符串类型的场景,而你已经对原始数据做了split()操作,此时journal Series的每行存储的是Python列表,自然无法用正则匹配字符串的方式提取内容。
另外你原有正则的价格匹配规则存在兼容问题:规则\d+[,.]\d+[,.]\d+要求价格必须有2个分隔符,适配不了第一个样本里仅带1个逗号的2,57格式,也是匹配失效的原因之一。

正确实现方案

方案1:直接从拆分后的列表提取(更高效,无需二次正则匹配)

你已经完成了拆分操作,直接按规则匹配列表内的元素即可:

import pandas as pd

# 定义提取规则函数
def extract_info(row_list):
    code = None
    code1 = None
    price = None
    for item in row_list:
        # 匹配10位数字的Code
        if isinstance(item, str) and item.isdigit() and len(item) == 10:
            code = item
        # 匹配两位数字的Code1
        elif isinstance(item, str) and item.isdigit() and len(item) == 2:
            code1 = item
        # 匹配带逗号的价格字段
        elif isinstance(item, str) and ',' in item:
            price = item
    return pd.Series([code, code1, price], index=['Code', 'Code1', 'Price'])

# 应用到journal Series生成新DataFrame
result = journal.apply(extract_info)

方案2:沿用正则匹配的修改方案

如果要沿用你之前的正则逻辑,需要先把每行的列表拼接回字符串,同时调整价格匹配规则:

# 先把每行列表转为空格分隔的字符串,再执行调整后的正则提取
t = journal.str.join(' ').str.extract(r'00\d\D+(\d{10})\D+(\d{2})\D+(\d+(?:[.,]\d+)*,\d+)')
t.columns = ['Code', 'Code1', 'Price']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:51:04