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

将含字符串子列表的列表转换为目标结构pandas DataFrame

问题原因

该异常和字符串内的单引号没有任何关系,核心原因是输入的嵌套列表结构不符合pd.DataFrame()的解析规则:
当前传入的列表中,每个外层子列表仅包含1个完整字符串元素,所有12个字段的内容都被包裹在这同一个字符串内,没有拆分为独立的列表元素。pd.DataFrame()构造二维表时,默认将每个子列表识别为一行数据,子列表内的每个独立元素识别为对应行的一列值,因此每个子列表只有1个元素时,最终只会生成1列。
简单来说,当前的行数据格式是['字段1,字段2,字段3'](单元素),而pandas能识别为多列的行格式需要是['字段1','字段2','字段3'](多元素)。

解决方法
  • 遍历原始列表,取出每个子列表内的完整字符串,先处理HTML转义字符(示例数据中"是HTML转义的双引号,需要转换为正常双引号),再按逗号将字符串拆分为独立的字段元素,得到规整的二维嵌套列表
  • 排查并修正原始数据的格式异常:示例数据中第6、7行末尾多1个冗余值,最后1行缺失成绩类字段,需要根据实际业务规则补全/删除,保证每行拆分后的字段数统一为12个
  • 将处理完成的规整二维列表传入pd.DataFrame()即可得到预期的12列DataFrame

可参考如下实现代码:

import pandas as pd
from html import unescape

# 原始输入数据
raw_data = [['1,er,2,Fado de Padd,1\'18"1,H,6,2600,J. Dekker,17 490 €,A. De Wrede,1,6'],
 ['2,e,7,Elixir Normand,1\'18"2,H,7,2600,S. Schoonhoven,24 755 €,S. Schoonhoven,14'],
 ['3,e,3,Give You All of Me,1\'18"2,H,5,2600,JF. Van Dooyeweerd,17 600 €,JF. Van Dooyeweerd,10'],
 ['4,e,4,Gouritch,1\'18"3,H,5,2600,BJ. Crebas,20 700 €,BJ. Crebas,32'],
 ['5,e,1,Franky du Cap Vert,1\'18"4,H,6,2600,JH. Mieras,15 536 €,N. De Vreede,65'],
 ['6,e,10,Défi Magik,1\'18"0,H,8,2620,F. Verkaik,44 865 €,AW. Bosscha,6,3'],
 ['7,e,9,Fleuron,1\'18"2,H,6,2620,M. Brouwer,44 830 €,D. Brouwer,7,3'],
 ['8,e,8,Dream Gibus,1\'18"6,H,8,2620,R. Ebbinge,33 330 €,Mme A. Lehmann,36'],
 ['9,e,5,Beau Gaillard,1\'19"5,H,10,2600,A. Bakker,20 140 €,N. De Vreede,44'],
 ['0,DAI,6,Bikini de Larcy,H,10,2600,D. Den Dubbelden,21 834 €,N. Rip,52']]

# 第一步:拆分字符串、转义特殊字符
processed_data = []
for row in raw_data:
    single_str = row[0]
    # 转换HTML转义字符,按逗号拆分字段
    split_fields = unescape(single_str).split(',')
    processed_data.append(split_fields)

# 第二步:修正示例数据的字段数异常(实际使用时请根据真实数据源规则调整)
# 给最后一行插入缺失的成绩字段占位
processed_data[-1].insert(4, '')
# 移除第6、7行末尾冗余的字段
processed_data[5] = processed_data[5][:-1]
processed_data[6] = processed_data[6][:-1]

# 第三步:构造DataFrame,可根据实际字段含义传入自定义列名
df = pd.DataFrame(
    processed_data,
    columns=['排名', '组别', '号码', '马名', '成绩', '性别', '年龄', '赛程', '练马师', '奖金', '骑师', '赔率']
)
print(df)
注意事项
  • 字符串内部的单引号属于普通字符,完全不会干扰pandas对列表结构的解析,不需要做替换处理
  • 如果字段内容本身包含逗号(比如带逗号的人名、地址信息),不能直接使用split(',')拆分,需要根据原始数据的分隔规则(比如引号包裹规则、固定长度规则)做精准字段提取
  • 示例中的字段修正逻辑仅适配给出的测试数据,真实场景下建议优先排查数据源生成逻辑,从源头避免字段缺失、冗余问题,保证每行字段数统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:24:14