我的知识记录

Python pandas读取Excel文件:read_excel一键转DataFrame

用pandas的read_excel读取xlsx,指定表头、跳过行、按列名筛选、读指定sheet,读出来直接就是DataFrame,适合数据分析场景。

场景痛点

openpyxl 适合改格式、写格子,但拿到一份表要做筛选、聚合、统计时,逐格写循环太啰嗦。pandas 一行 read_excel 就把整张表读成 DataFrame,后面 df.groupbydf.headdf[df["金额"]>1000] 全都能用,效率高一个数量级。

用到的库

pip install pandas openpyxl

pandas 读 .xlsx 默认走 openpyxl 引擎,所以两个都要装。

完整代码

import pandas as pd


def demo_read(file_path: str) -> None:
# 1) 最基础:整张表读成 DataFrame,第一行当表头
df = pd.read_excel(file_path, sheet_name="销售明细")
print(df.head())          # 前 5 行
print("形状:", df.shape)  # (行数, 列数)
print("列名:", df.columns.tolist())

# 2) 只读指定列,省内存
df2 = pd.read_excel(file_path, sheet_name="销售明细",
usecols=["日期", "区域", "金额"])
print(df2.head())

# 3) 跳过前 N 行(表上面有标题、说明文字时常用)
df3 = pd.read_excel(file_path, sheet_name="销售明细",
skiprows=0, header=0)

# 4) 同时读多个 sheet
sheets = pd.read_excel(file_path, sheet_name=["销售明细", "汇总"])
for name, df_sheet in sheets.items():
print(f"--- {name} ---")
print(df_sheet.head())

# 5) 读完直接做统计
total = df.groupby("区域")["金额"].sum()
print("各区域总金额:\n", total)

big = df[df["金额"] > 1000]
print("金额大于1000的行:\n", big)


if __name__ == "__main__":
demo_read(r"D:\reports\销售明细.xlsx")

代码讲解

  • pd.read_excel(路径, sheet_name="销售明细") 默认把第一行当列名;sheet_name=None 会把所有 sheet 读成一个字典。
  • usecols=["日期","区域","金额"] 只读需要的列,几万行的表能省一大半内存。
  • skiprows 用来跳过表前面的说明行;如果表头不在第一行,配合 header=N 指定哪一行是表头。
  • 读出来的 df 就是 DataFrame,df.head() 看前几行,df.shape 看行列数,df.columns 看列名。
  • 最后两行演示直接在 DataFrame 上做分组求和和条件筛选,这是 pandas 相比 openpyxl 的核心优势。

运行结果

控制台依次打印表头预览、行列数、列名、指定列预览、两个 sheet 的前几行,最后输出各区域总金额和金额大于 1000 的行。把路径换成自己的文件即可。

注意事项

  • pandas 本身不负责解析 xlsx,底层用 openpyxl(读)或 xlsxwriter(写),缺了引擎会报 ImportError,按提示 pip install openpyxl
  • .xls 老格式需要装 xlrd,且新版 xlrd 不再支持 xlsx,建议统一转成 .xlsx
  • 日期列读出来默认是 datetime64,做比较、排序直接用;要转字符串用 df["日期"].dt.strftime("%Y-%m-%d")
  • 空单元格读出来是 NaN,做统计前记得 df.dropna()df.fillna(0)
  • 特别大的表(几十万行)read_excel 较慢,可以先在 Excel 里另存为 CSV 再用 pd.read_csv

Python pandas读取Excel文件:read_excel一键转DataFrame

标签:

更新时间:2026-09-15 09:02:22

上一篇:Python读取Excel单元格数据:openpyxl逐格取值详解

下一篇:Python openpyxl 插入Excel柱状图步骤详解