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

pandas读写CSV文件时如何避免嵌套列表出现多余双引号

异常原因

CSV是纯文本存储格式,本身不支持列表、字典这类复合Python数据类型。调用df.to_csv()写入时,pandas会自动将user列的列表对象强制转为字符串写入文件;后续用默认参数调用pd.read_csv()读取时,pandas会把该列识别为普通字符串类型,不会自动把字符串形式的列表还原为原生列表对象,最终读取到的就是带字符串标识的内容,和原始列表结构不一致。

可行解决方案
  • 读取CSV时增加类型转换逻辑
    不需要修改写入逻辑,读取时通过converters参数指定对应列的转换规则,用标准库ast的literal_eval方法安全将字符串格式的Python字面量还原为原生列表:
    import pandas as pd
    import ast
    
    # 读取时直接转换user列类型
    df = pd.read_csv('users.csv', converters={'user': ast.literal_eval})
    
    # 验证结果
    print(df['user'].to_list())
    # 输出:[['mary', 'jane'], ['alex', 'andrew']]
    
    该方法可以在保留CSV存储格式的前提下,还原原始数据结构。
  • 更换为支持原生类型序列化的存储格式(推荐)
    如果没有强制使用CSV的需求,优先选择parquet、pickle等pandas原生支持的存储格式,读写过程不会丢失任何数据类型信息,不需要额外写转换逻辑:
    # 以parquet格式为例(需要提前安装pyarrow或fastparquet依赖)
    df.to_parquet('users.parquet')
    df = pd.read_parquet('users.parquet')
    
    # 以pickle格式为例(Python原生支持,不需要额外依赖)
    df.to_pickle('users.pkl')
    df = pd.read_pickle('users.pkl')
    
    该方式读写后的DataFrame和原始对象结构、类型完全一致,不会出现类型转换异常。
  • 写入前拆分列表列(非必要不推荐)
    如果必须使用纯CSV格式且不想在读取时加转换逻辑,可以在写入前将列表列拆分为多列存储,但会改变原始表结构,仅适合特定业务场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:39:18