如何用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
相关产品推荐
相关产品推荐

