暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python 操作 Excel 的常用方法

老柴杂货铺 2025-02-22
52
以下是 Python 操作 Excel 的常用方法及代码示例,涵盖数据读取、写入、处理、格式调整等高频场景,使用主流库(pandas
openpyxl
xlrd/xlwt
)实现:

一、基础读写操作

1. 使用 pandas 快速读写

    import pandas as pd


    # 读取整个工作表
    df = pd.read_excel("data.xlsx", sheet_name="Sheet1")


    # 读取指定列范围(A到C列)
    df = pd.read_excel("data.xlsx", usecols="A:C")


    # 写入数据(保留原有格式)
    with pd.ExcelWriter("output.xlsx", engine="openpyxl", mode="a"as writer:
        df.to_excel(writer, sheet_name="NewSheet", index=False)


    2. 使用 openpyxl 精细化操作

      from openpyxl import load_workbook


      # 打开现有文件
      wb = load_workbook("template.xlsx")
      ws = wb.active


      # 按单元格读写
      ws["B2"] = "动态数据"
      print(ws["A1"].value)


      # 保存修改(会覆盖原文件)
      wb.save("modified_template.xlsx")


      二、数据操作技巧

      1. 数据清洗

        # 删除空值行
        df_clean = df.dropna(subset=["关键列"])


        # 替换异常值
        df["价格"] = df["价格"].replace(999, pd.NA)


        # 类型转换
        df["日期"] = pd.to_datetime(df["日期列"], format="%Y/%m/%d")


        2. 公式计算

          # 添加公式列(使用 openpyxl)
          ws["D2"] = "=B2*C2"
          ws["D2"].number_format = "0.00"  # 设置数字格式


          # 使用 pandas 计算
          df["总价"] = df["单价"] * df["数量"]


          3. 数据筛选

            # 多条件筛选(pandas)
            filtered = df[(df["部门"] == "销售") & (df["金额"] > 10000)]


            # 按颜色筛选(openpyxl)
            from openpyxl.styles import PatternFill


            yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
            for row in ws.iter_rows(min_row=2):
                if row[3].fill == yellow_fill:
                    print("标记行:", row[0].value)


            三、格式调整

            1. 单元格格式

              from openpyxl.styles import Font, Alignment


              # 设置字体和居中对齐
              bold_font = Font(bold=True, color="FF0000")
              center_alignment = Alignment(horizontal="center")
              ws["A1"].font = bold_font
              ws["A1"].alignment = center_alignment


              # 设置列宽/行高
              ws.column_dimensions["B"].width = 20
              ws.row_dimensions[1].height = 30


              2. 条件格式

                from openpyxl.formatting.rule import FormulaRule


                # 高亮大于10000的值
                red_fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE")
                rule = FormulaRule(formula=["$C2>10000"], stopIfTrue=True, fill=red_fill)
                ws.conditional_formatting.add("C2:C100", rule)


                3. 冻结窗格

                  ws.freeze_panes = "B2"  # 冻结首行和首列


                  四、高级功能

                  1. 合并工作表

                    # 合并多个Excel文件
                    all_files = glob.glob("sales_data/*.xlsx")
                    combined_df = pd.concat([pd.read_excel(f) for f in all_files], ignore_index=True)


                    2. 生成数据透视表

                      pivot = pd.pivot_table(df, 
                                            values="销售额"
                                            index="地区"
                                            columns="季度",
                                            aggfunc="sum")
                      pivot.to_excel("pivot_table.xlsx")


                      3. 插入图表(openpyxl)

                        from openpyxl.chart import BarChart, Reference


                        # 创建柱状图
                        chart = BarChart()
                        data = Reference(ws, min_row=2, max_row=5, min_col=2, max_col=3)
                        chart.add_data(data, titles_from_data=True)


                        # 设置图表位置
                        ws.add_chart(chart, "E2")


                        五、性能优化

                        1. 大文件处理

                          # 分块读取(pandas)
                          chunk_size = 10000
                          for chunk in pd.read_excel("large_file.xlsx", chunksize=chunk_size):
                              process(chunk)


                          # 只读模式(openpyxl)
                          wb = load_workbook(filename="huge_file.xlsx", read_only=True)


                          2. 数据类型优化

                            # 指定列数据类型
                            dtype_dict = {"ID": str, "Amount"float}
                            df = pd.read_excel("data.xlsx", dtype=dtype_dict)


                            六、常见问题解决

                            1. 处理日期格式

                              # 强制指定日期格式
                              df = pd.read_excel("data.xlsx", parse_dates=["日期列"], date_parser=lambda x: pd.to_datetime(x, format="%d-%m-%Y"))


                              2. 中文编码问题

                                # 保存时指定编码
                                df.to_excel("output.xlsx", encoding="utf-8-sig"


                                3. 处理合并单元格

                                  # 获取合并单元格范围
                                  merged_ranges = ws.merged_cells.ranges
                                  for merged_range in merged_ranges:
                                      print(f"合并区域: {merged_range.coord}")


                                  库对比指南

                                  库名称
                                  最佳场景
                                  文件格式支持
                                  优点
                                  缺点
                                  pandas
                                  快速数据清洗与分析
                                  .xlsx/.xls/.csv
                                  简洁API,大数据处理能力强
                                  格式控制能力较弱
                                  openpyxl
                                  复杂格式调整与图表操作
                                  .xlsx
                                  精细控制样式与公式
                                  内存消耗较大
                                  xlwings
                                  Excel与Python实时交互
                                  .xlsx
                                  支持VBA联动
                                  需要安装Excel客户端
                                  xlsxwriter
                                  纯写入场景
                                  .xlsx
                                  高性能写入
                                  无法修改现有文件

                                  常用代码片段

                                  1. 遍历所有工作表

                                    with pd.ExcelFile("data.xlsx"as excel:
                                        for sheet_name in excel.sheet_names:
                                            df = pd.read_excel(excel, sheet_name=sheet_name)
                                            print(f"处理工作表: {sheet_name}")


                                    2. 批量重命名列

                                      df.rename(columns={
                                          "OldName1""新名称1",
                                          "OldName2""新名称2"
                                      }, inplace=True)


                                      3. 生成带格式的Excel

                                        with pd.ExcelWriter("formatted.xlsx", engine="xlsxwriter"as writer:
                                            df.to_excel(writer, sheet_name="Sheet1")


                                            workbook = writer.book
                                            worksheet = writer.sheets["Sheet1"]


                                            # 添加自定义格式
                                            money_format = workbook.add_format({"num_format""$#,##0"})
                                            worksheet.set_column("C:C"15, money_format)


                                        掌握这些操作可覆盖 90% 的 Excel 自动化需求,建议根据任务复杂度选择合适的工具组合(如 pandas + openpyxl)。对于超大数据集(>1GB),可考虑导出为 Parquet 格式处理后再转回 Excel。


                                        文章转载自老柴杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                        评论