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

如何用Python(Pandas/CSV模块)解析文件并保留第三列为列表?

解决Pandas读取含列表格式列的CSV文件报错问题

你的CSV文件第三列是包含逗号的列表格式,直接用pd.read_csv()会把列表内部的逗号当成字段分隔符,导致字段数不匹配报错。下面提供两种可行的解析方案:

方案一:使用Pandas的converters参数(推荐)

利用ast.literal_eval将第三列的字符串解析为Python列表,同时通过skipinitialspace=True忽略字段前的空格:

import pandas as pd
import ast

# 读取文件,指定第三列的转换函数
df = pd.read_csv(
    "your_file.csv",
    skipinitialspace=True,  # 忽略字段开头的空格
    converters={"col3": ast.literal_eval}  # 将col3的字符串转成列表
)

# 验证结果
print(df.dtypes)
print(df["col3"][0])  # 输出列表类型的内容

如果列名因空格问题识别不准确,可以手动指定列名:

df = pd.read_csv(
    "your_file.csv",
    names=["col1", "col2", "col3"],  # 手动指定列名
    skiprows=1,  # 跳过原表头行
    skipinitialspace=True,
    converters={"col3": ast.literal_eval}
)

方案二:使用CSV模块手动解析

通过Python内置的csv模块读取每行数据,再自行处理第三列的列表转换:

import csv
import ast
import pandas as pd

data = []
with open("your_file.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f, skipinitialspace=True)
    header = next(reader)  # 获取表头
    for row in reader:
        # 将第三列的字符串解析为列表
        row[2] = ast.literal_eval(row[2])
        data.append(row)

# 转换为DataFrame
df = pd.DataFrame(data, columns=header)
print(df)

补充说明

  • ast.literal_eval比eval()更安全,只会解析合法的Python字面量(比如列表、字典等),避免执行恶意代码。
  • 如果CSV中的列表格式有语法错误(比如缺少引号、括号不匹配),需要先修复文件格式,否则转换会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:57:16