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

使用Python和Matplotlib绘制Excel多工作表数据报错及同图实现

问题描述

有一个包含多工作表的Excel文件,需求如下:

  • 移除显示工作表名称的首行、显示单位的第三行
  • 将其中5个工作表的数据以D为X轴、S为Y轴绘制在同一图表中

尝试代码后出现KeyError: 'D',报错信息:

x = list(df['D'])
         ~~^^^^^^^^^^^^^^^
KeyError: 'D'

尝试的代码:

import openpyxl as xl
import pandas as pd
import matplotlib.pyplot as plt

wb = xl.load_workbook('Mohsen.xlsx')
fig, ax = plt.subplots()
for sheets in wb.worksheets:
     df = pd.read_excel('Mohsen.xlsx', sheet_name=None, header=1, skiprows=lambda x: x in [2],
                   names=["D", "S"])
     x = list(df['D'])
     y = list(df["S"])
    ax.lines(x, y)
plt.show()
问题分析
  1. sheet_name参数错误:sheet_name=None会返回一个字典(键为工作表名,值为对应DataFrame),而非单个DataFrame,直接用df['D']会因为字典中没有键'D'触发KeyError。
  2. skiprows逻辑错误:header=1已指定原文件第2行(索引从0开始)为表头,要跳过原文件第三行(索引2),无需用lambda,直接传入skiprows=[2]即可;另外循环中重复读取整个Excel文件,效率极低。
  3. 绘图方法错误:ax.lines不是绘图API,正确的折线图绘制方法是ax.plot()。
修正后的代码

假设需要绘制的5个工作表名为['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5'](可根据实际修改),代码如下:

import pandas as pd
import matplotlib.pyplot as plt

# 指定要绘制的5个工作表名称
target_sheets = ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5']
# 统一读取参数:跳过第1行(索引0)、第3行(索引2),指定表头为D、S
read_params = {
    'header': None,  # 不自动识别表头
    'skiprows': [0, 2],  # 跳过原文件第1行和第3行(索引0、2)
    'names': ['D', 'S'],  # 自定义列名
}

fig, ax = plt.subplots(figsize=(10, 6))

for sheet_name in target_sheets:
    # 读取单个工作表的数据
    df = pd.read_excel('Mohsen.xlsx', sheet_name=sheet_name, **read_params)
    # 绘制折线图,添加标签用于图例
    ax.plot(df['D'], df['S'], label=sheet_name)

# 添加图表元素
ax.set_xlabel('D')
ax.set_ylabel('S')
ax.set_title('Multi-Sheet Data Plot')
ax.legend()

plt.show()
代码说明
  • 直接通过target_sheets指定要绘制的5个工作表,避免读取不必要的表
  • skiprows=[0,2]直接跳过原文件的首行(工作表名)和第三行(单位),结合names自定义列名,确保D、S列能被正确识别
  • 每个工作表的绘图结果添加label,最后通过legend()显示工作表名区分不同曲线
  • 无需使用openpyxl单独加载工作簿,pandas的read_excel已足够完成需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:33:40