news 2026/5/26 10:12:33

Python深度挖掘:openpyxl和pandas的使用详细

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python深度挖掘:openpyxl和pandas的使用详细

Python 深度挖掘:openpyxl 和 pandas 的使用详细指南(2026 最新版)

openpyxlpandas是 Python 数据处理领域的两大核心库,尤其在处理 Excel 文件和数据分析时常结合使用。

  • openpyxl:专注于 Excel 文件(.xlsx)的读写和操作,是纯 Python 实现,无需安装 Excel 软件。常用于自动化报表、数据导出等场景。
  • pandas:强大的数据分析库,以 DataFrame 为核心,处理结构化数据(如表格)。它可以无缝集成 openpyxl 来读写 Excel。

截至 2026 年,openpyxl 最新版为 3.2.x,pandas 为 2.3.x。两者结合使用,能高效处理大数据量的 Excel 操作。

本文从安装、基础使用、进阶功能、结合案例一步步深度讲解。所有代码基于 Python 3.10+ 测试,确保可运行。

一、安装与环境准备

pipinstallopenpyxl pandas# 如果需要绘图(pandas 常用)pipinstallmatplotlib seaborn
  • 依赖:openpyxl 无外部依赖;pandas 依赖 NumPy(自动安装)。
  • 测试安装
    importopenpyxlimportpandasaspdprint(openpyxl.__version__)# 如 3.2.0print(pd.__version__)# 如 2.3.0

二、openpyxl 详细使用(Excel 操作专家)

openpyxl 提供对 Excel 的完整控制,包括工作簿、工作表、单元格、公式、样式、图表等。

1. 基础概念

  • Workbook:Excel 文件(.xlsx)。
  • Worksheet:工作表(Sheet)。
  • Cell:单元格。

2. 创建与保存 Excel 文件

fromopenpyxlimportWorkbook# 创建新工作簿wb=Workbook()# 获取默认工作表(Sheet)ws=wb.active ws.title="MySheet"# 重命名# 写入数据ws['A1']="姓名"# 单元格 A1ws['B1']="年龄"ws.cell(row=2,column=1,value="张三")# 行2,列1ws.cell(row=2,column=2,value=30)# 追加行ws.append(["李四",25])# 保存文件wb.save("example.xlsx")

3. 读取 Excel 文件

fromopenpyxlimportload_workbook# 加载文件(只读模式提高性能)wb=load_workbook("example.xlsx",read_only=True)# 获取指定工作表ws=wb["MySheet"]# 读取单元格print(ws['A1'].value)# "姓名"# 迭代行forrowinws.iter_rows(min_row=2,max_row=3,min_col=1,max_col=2,values_only=True):print(row)# 输出如:('张三', 30)# 获取维度print(ws.dimensions)# 如 "A1:B3"
  • 进阶读取iter_rows(values_only=True)返回元组,提高效率;read_only=True适合大文件。

4. 公式与计算

ws['C1']="总分"ws['C2']="=SUM(B2:B3)"# 公式会自动计算wb.save("example_with_formula.xlsx")
  • 加载后,公式值可通过data_only=True获取计算结果(需先用 Excel 打开保存一次)。

5. 样式与格式

fromopenpyxl.stylesimportFont,PatternFill,Alignment,Border,Side# 字体:加粗、红色ws['A1'].font=Font(bold=True,color="FF0000")# 填充:黄色背景ws['B1'].fill=PatternFill(start_color="FFFF00",end_color="FFFF00",fill_type="solid")# 对齐:居中ws['C1'].alignment=Alignment(horizontal="center",vertical="center")# 边框:细线thin=Side(border_style="thin",color="000000")ws['A1'].border=Border(top=thin,left=thin,right=thin,bottom=thin)# 列宽/行高ws.column_dimensions['A'].width=15ws.row_dimensions[1].height=20wb.save("styled.xlsx")

6. 图表插入

fromopenpyxl.chartimportBarChart,Reference# 数据准备ws.append(["产品","销量"])ws.append(["苹果",50])ws.append(["香蕉",30])# 创建柱状图chart=BarChart()data=Reference(ws,min_col=2,min_row=2,max_row=3)categories=Reference(ws,min_col=1,min_row=2,max_row=3)chart.add_data(data)chart.set_categories(categories)chart.title="销量图"ws.add_chart(chart,"D1")# 放置位置wb.save("chart.xlsx")

7. 进阶功能:合并单元格、冻结窗格、过滤器

# 合并单元格ws.merge_cells('A1:B1')# 冻结首行ws.freeze_panes='A2'# 添加过滤器ws.auto_filter.ref="A1:B3"wb.save("advanced.xlsx")

8. 处理大文件(性能优化)

  • read_only=Truewrite_only=True模式。
  • 批量操作:使用ws.append()而非逐个单元格写入。
  • 对于超大文件(>10万行),考虑结合 pandas。

三、pandas 详细使用(数据分析神器)

pandas 以DataFrame(表格)和Series(列)为核心,擅长数据清洗、转换、分析、可视化。

1. 基础概念

  • DataFrame:二维表格,带标签的行/列。
  • Series:一维数组,带标签。

2. 创建 DataFrame

importpandasaspdimportnumpyasnp# 从字典创建data={'姓名':['张三','李四','王五'],'年龄':[30,25,28],'分数':[85.5,92.0,78.5]}df=pd.DataFrame(data)# 从列表创建df2=pd.DataFrame(np.random.rand(3,2),columns=['A','B'],index=['row1','row2','row3'])print(df)# 输出:# 姓名 年龄 分数# 0 张三 30 85.5# 1 李四 25 92.0# 2 王五 28 78.5

3. 数据访问与操作

  • 访问

    print(df['姓名'])# Series: 张三 李四 王五print(df.loc[0])# 第一行print(df.iloc[:,1:3])# 列1到2(年龄、分数)print(df[df['年龄']>25])# 过滤:年龄 > 25 的行
  • 修改

    df['奖金']=df['分数']*10# 新列:分数 * 10df.loc[0,'年龄']=31# 修改特定值df=df.drop('奖金',axis=1)# 删除列
  • 统计

    print(df.describe())# 均值、标准差等print(df['分数'].mean())# 平均分

4. 数据清洗与转换

  • 缺失值

    df.loc[1,'分数']=np.nan df=df.fillna(0)# 填 0df=df.dropna()# 删含 NaN 行
  • 分组聚合

    grouped=df.groupby('年龄').agg({'分数':'mean'})# 按年龄分组,求分数平均
  • 合并

    df_other=pd.DataFrame({'姓名':['张三','赵六'],'城市':['北京','上海']})merged=pd.merge(df,df_other,on='姓名',how='left')# 左连接

5. 读写文件(与 openpyxl 集成)

pandas 默认用 openpyxl 作为 Excel 引擎(engine=‘openpyxl’)。

  • 读 Excel

    df=pd.read_excel("example.xlsx",sheet_name="MySheet",engine="openpyxl")
  • 写 Excel

    df.to_excel("output.xlsx",sheet_name="Data",index=False,engine="openpyxl")# 多工作表写入withpd.ExcelWriter("multi.xlsx",engine="openpyxl")aswriter:df.to_excel(writer,sheet_name="Sheet1")df2.to_excel(writer,sheet_name="Sheet2")
  • 大文件优化:用pd.read_excel(usecols=['A:B'], nrows=1000)指定列/行。

6. 可视化

df.plot(kind='bar',x='姓名',y='分数')# 柱状图df['分数'].hist(bins=10)# 直方图
  • 集成 Seaborn/Matplotlib 更美观。

7. 进阶:时间序列、透视表、多索引

  • 时间序列

    dates=pd.date_range('20260101',periods=5)ts_df=pd.DataFrame(np.random.randn(5),index=dates)ts_df.resample('D').mean()# 按天重采样
  • 透视表

    pivot=pd.pivot_table(df,values='分数',index='姓名',aggfunc='mean')

四、openpyxl 与 pandas 结合实战案例

场景:读取 Excel 数据,用 pandas 分析后,写入新 Excel 并添加样式/图表。

importpandasaspdfromopenpyxlimportload_workbookfromopenpyxl.chartimportLineChart,Reference# 1. 用 pandas 读入df=pd.read_excel("input.xlsx",engine="openpyxl")# 2. pandas 分析df['总分']=df['数学']+df['英语']summary=df.describe()# 3. 写入新文件(pandas 先写)df.to_excel("output.xlsx",index=False,engine="openpyxl")summary.to_excel("output.xlsx",sheet_name="Summary",engine="openpyxl")# 4. 用 openpyxl 添加样式和图表wb=load_workbook("output.xlsx")ws=wb.active# 默认 Sheet# 添加样式forcellinws["A1":"D1"]:forcincell:c.font=Font(bold=True)# 添加图表chart=LineChart()data=Reference(ws,min_col=2,min_row=1,max_col=4,max_row=len(df)+1)chart.add_data(data,titles_from_data=True)ws.add_chart(chart,"F1")wb.save("output.xlsx")

优势:pandas 负责数据逻辑,openpyxl 负责 Excel 细节(如样式、图表)。

五、性能优化与常见坑

  • 大文件:pandas 用pd.read_excel(chunksize=10000)分块读;openpyxl 用 write_only 模式。
  • 常见坑
    • openpyxl 不支持 .xls(旧格式),用 xlrd 或 pandas 转换。
    • pandas 读 Excel 时,指定dtype避免类型推断错误。
    • 公式:pandas 写公式需用=SUM(...),但计算需加载 data_only。
  • 资源消耗:pandas DataFrame 内存大,用df.info()检查;openpyxl 适合逐行处理。

六、总结与进阶建议

  • openpyxl:适合纯 Excel 操作,深度定制样式/图表。
  • pandas:数据分析主力,结合 openpyxl 读写 Excel 更强大。
  • 结合使用:80% 场景 pandas 足够,复杂样式再用 openpyxl 后处理。

进阶资源:

  • 官方文档:openpyxl.readthedocs.io / pandas.pydata.org
  • 书籍:《Python 数据分析》(Wes McKinney)
  • 社区:Stack Overflow / Pandas GitHub

如果需要特定案例代码(如批量处理 Excel、自动化报表、机器学习数据准备),或运行示例输出,告诉我,我可以进一步扩展!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 12:00:14

java+vue基于springboot的物业报修系统 社区维修分配系统 p7qs0n7

目录 基于SpringBoot和Vue的物业报修系统系统核心功能模块技术实现特点系统优化方案数据库设计要点 开发技术路线结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 基于SpringBoot和Vue的物业报修系统 该系统采用前后端分离架构&#…

作者头像 李华
网站建设 2026/5/9 9:36:18

它打电话前,会“预习”客户资料——AI销售机器人

一、问题:传统电销的核心痛点——“盲打”导致的转化率瓶颈 根据Gartner 2024年全球销售自动化市场报告,传统电销的平均转化率仅为2.1%,其中37%的失败案例源于销售对客户资料的掌握不足:要么遗漏客户历史订单的核心诉求&#xff…

作者头像 李华
网站建设 2026/5/21 20:40:09

变频器线速度计算程序示例:实时输入参数计算线速度输出

变频器频率与线速度程序示例,输入相应参数可以计算出实时的线速度。变频器在工业自动化领域就像个隐形管家,今天咱们来聊聊怎么用代码把它的输出频率换算成实际线速度。直接上硬菜,先看核心公式:线速度π直径频率/(减速比60)。这个…

作者头像 李华
网站建设 2026/5/21 15:36:20

2026年AI应用爆发元年已至,大模型投资逻辑全解析

AI大模型应用正迎来关键转折点,随着智谱、MiniMax上市,AI从基础建设转向应用落地。2026年或成AI应用爆发元年,中国企业因工程师红利、供应链融合和政策支持优势有望率先实现规模化落地。AI手机、眼镜、机器人和智能驾驶是重点方向&#xff0c…

作者头像 李华