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

如何读取含格式错误列表列的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:00