如何读取CSV中存储的列表型数据为pandas DataFrame并保留原有数据类型
问题本质
CSV为纯文本格式,无法直接存储Python列表类型,你导出的文件中所有列表都被序列化为字符串格式,读取时需要手动做类型解析才能还原原有列表结构。
可行解决方案
方案1:读取阶段通过converters参数完成转换
该方案在读取CSV的同时完成所有列的类型转换,无需后续二次处理:
import pandas as pd import ast # 若提前已知列名/列数量,可以直接构造converters字典 # 不确定列信息的话可以先读取表头获取所有列名: df_header = pd.read_csv("list_entries.csv", nrows=0) converters = {col: ast.literal_eval for col in df_header.columns} # 读取时指定converters,加index_col=0是为了还原你原DataFrame的行索引 df = pd.read_csv("list_entries.csv", converters=converters, index_col=0)
方案2:读取完成后批量转换
你之前用applymap的逻辑是正确的,遇到的NameError: name 'ast' is not defined报错是因为部分IDE调试器执行lambda时,上下文没有继承主代码中导入的ast模块,调整写法把ast导入放到lambda内部即可解决:
import pandas as pd # 先读取CSV df = pd.read_csv("list_entries.csv", index_col=0) # 批量转换所有列的字符串为列表 df = df.applymap(lambda x: __import__('ast').literal_eval(x))
结果验证
执行以下代码可以确认转换是否符合预期:
# 验证元素类型为列表 print(type(df.iloc[0, 0])) # 输出应为 <class 'list'> # 验证值正确 print(df.iloc[0, 0]) # 输出应为 [1, 0]
内容的提问来源于stack exchange,提问作者mcp
相关产品推荐
相关产品推荐

