使用Pandas/Matplotlib绘制过滤后CSV销售数据失败,求技术支持
解决Lettuce销售/采购数据可视化问题
步骤1:确认数据过滤与有效性
首先确保你正确过滤了Lettuce数据,且过滤后的数据非空:
import pandas as pd import matplotlib.pyplot as plt # 读取CSV数据 df = pd.read_csv('your_dataset.csv') # 过滤Lettuce数据(替换为你实际的商品列名,比如Item/Product) lettuce_data = df[df['Product'] == 'Lettuce'] # 检查过滤结果 print("过滤后数据行数:", len(lettuce_data)) print(lettuce_data[['Product', 'KGs_Sold', 'KGs_Purchased']].head())
如果输出行数为0,说明过滤条件有误:检查商品名是否大小写匹配(比如是'lettuce'还是'Lettuce'),或者列名拼写错误,可用df.columns查看所有列名。
步骤2:处理重复记录
重复记录会导致绘图异常,优先去重或按维度聚合:
选项A:直接去重(保留第一条重复记录)
lettuce_clean = lettuce_data.drop_duplicates()
选项B:按日期聚合(推荐,比如统计每日总销量/采购量)
如果数据包含日期列(比如Date),按日期分组求和更有分析意义:
# 按日期聚合,计算每日总销量和采购量 lettuce_agg = lettuce_data.groupby('Date').agg({ 'KGs_Sold': 'sum', 'KGs_Purchased': 'sum' }).reset_index() # 按日期排序(避免绘图顺序混乱) lettuce_agg = lettuce_agg.sort_values('Date')
步骤3:确保数值列格式正确
检查KGs_Sold和KGs_Purchased是否为数值类型,若为字符串则转换:
# 转换为数值类型,无法转换的设为NaN并删除 lettuce_agg['KGs_Sold'] = pd.to_numeric(lettuce_agg['KGs_Sold'], errors='coerce') lettuce_agg['KGs_Purchased'] = pd.to_numeric(lettuce_agg['KGs_Purchased'], errors='coerce') # 删除含空值的行 lettuce_agg = lettuce_agg.dropna(subset=['KGs_Sold', 'KGs_Purchased'])
步骤4:绘制可视化图表
用Matplotlib绘制对比折线图(或柱状图):
plt.figure(figsize=(12, 6)) # 绘制销量和采购量折线 plt.plot(lettuce_agg['Date'], lettuce_agg['KGs_Sold'], label='KGs Sold', marker='o', color='#2ecc71') plt.plot(lettuce_agg['Date'], lettuce_agg['KGs_Purchased'], label='KGs Purchased', marker='s', color='#e74c3c') # 设置图表样式 plt.xlabel('Date', fontsize=12) plt.ylabel('Kilograms', fontsize=12) plt.title('Lettuce Sales vs Purchases Trend', fontsize=14) plt.legend(fontsize=10) plt.xticks(rotation=45, ha='right') # 旋转日期标签避免重叠 plt.tight_layout() # 自动调整布局 plt.show()
常见排查点
- 若图表无内容:确认过滤后的数据非空,且数值列无全空情况
- 若线条混乱:检查日期列是否已排序,或重复记录未处理
- 若报错
TypeError:确认数值列已转换为数值类型,无字符串残留
内容的提问来源于stack exchange,提问作者Jack Carruthers
相关产品推荐
相关产品推荐

