如何读取含格式错误列表列的CSV并绘制对应多折线图
解决方法
1. 核心思路
不需要提前拆分为独立6列,直接将数据转换为长表格式(每行对应单个客户的单个x轴取值与对应频率)即可直接绘图,整体步骤分为4步:无效行过滤、字符串列表转真实列表、长表转换、绘图。
2. 完整可运行代码
首先导入依赖库:
import pandas as pd import ast import seaborn as sns import matplotlib.pyplot as plt
然后处理数据+绘图:
# 读取CSV,替换为你的实际文件路径 df = pd.read_csv("your_file.csv") # 第一步:过滤含NA、*的无效行 df = df[~df["List_Items"].isin(["NA", "*"])].dropna(subset=["List_Items"]).reset_index(drop=True) # 第二步:将字符串格式的列表转为Python原生列表 df["List_Items"] = df["List_Items"].apply(ast.literal_eval) # 可选边界处理:如果存在列表长度不足6的情况,补空值对齐x轴 # df["List_Items"] = df["List_Items"].apply(lambda x: x + [pd.NA]*(6 - len(x)) if len(x)<6 else x[:6]) # 第三步:转换为长表格式,生成x轴标签 long_df = df.explode("List_Items", ignore_index=True) long_df["x_axis"] = long_df.groupby("Customer").cumcount() + 1 # cumcount从0计数,加1得到1-6的x轴取值 # 第四步:绘制多折线图 plt.figure(figsize=(8, 5)) sns.lineplot(data=long_df, x="x_axis", y="List_Items", hue="Customer", marker="o", linewidth=2) # 图表基础配置 plt.xlabel("x-axis") plt.ylabel("y-axis") plt.xticks(range(1,7)) # 固定x轴刻度为1-6 plt.grid(alpha=0.3) plt.show()
3. 拆分为6列的可选方案
如果你确实需要先拆为6列单独存储,可在第二步转换完列表后添加如下代码:
# 拆分为item_1到item_6共6列 df[["item_1", "item_2", "item_3", "item_4", "item_5", "item_6"]] = pd.DataFrame(df["List_Items"].tolist(), index=df.index) # 后续绘图时遍历每一行客户数据,x取1-6,y取对应item列的值即可
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

