如何处理并绘制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
相关产品推荐
相关产品推荐

