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

如何处理并绘制CSV文件中存储为字符串格式的列表型列数据

解决CSV中字符串格式列表转数值列表并绘图的问题

这个问题我之前也碰到过!核心原因是你的CSV里Column1和Column2被pandas当成普通字符串读进来了,那些方括号[、]还有逗号都是字符串的一部分,直接用astype(float)肯定会报错。给你两个关键步骤解决:

1. 把字符串格式的列表转成真实的数值列表

pandas自带的读取方法不会自动识别这种带方括号的字符串列表,我们可以用Python标准库的ast.literal_eval来处理——它能安全地把符合Python字面量格式的字符串转成对应的对象(这里就是float列表)。

你有两种处理方式:

  • 方式一:读取CSV时直接转换
    提前定义转换器函数,读取时指定给对应列:

    import pandas as pd
    import matplotlib.pyplot as plt
    import ast
    
    def str_to_numeric_list(s):
        return ast.literal_eval(s)
    
    # 读取CSV时,用converters参数处理Column1和Column2
    df = pd.read_csv('L.csv', converters={'Column1': str_to_numeric_list, 'Column2': str_to_numeric_list})
    
  • 方式二:读取后批量转换
    如果已经读取了CSV,也可以对列批量应用转换:

    df = pd.read_csv('L.csv')
    # 对目标列应用ast.literal_eval
    df['Column1'] = df['Column1'].apply(ast.literal_eval)
    df['Column2'] = df['Column2'].apply(ast.literal_eval)
    

2. 调整绘图代码

现在Column1和Column2已经是真实的数值列表了,直接拿来绘图就行。你可以用iterrows()遍历每一行数据:

plt.figure(figsize=(8, 6))

for idx, row in df.iterrows():
    # 直接用row['Column1']和row['Column2']作为plot的参数
    plt.plot(row['Column1'], row['Column2'], linestyle="--", 
             label="{}, Led={:.3f}".format(row['Name'], row['Column3']))

plt.xlabel('Column1 Values')
plt.ylabel('Column2 Values')
plt.title('Column1 vs Column2 Comparison')
plt.legend()
plt.show()

额外提示

如果你的CSV里的字符串列表有空格(比如[0.1, 0.2, 0.3])也不用担心,ast.literal_eval完全能处理这种格式,不需要额外去空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:17:41