乐于分享
好东西不私藏

Pandas 操作Excel Sheet

Pandas 操作Excel Sheet

记录下pandas操作sheet 一些语句

1. 环境依赖

pip install pandas openpyxl xlsxwriter

2. 批量读取:一行代码加载全表

使用 sheet_name=None 将整个 Excel 文件加载为 OrderedDict,Key 为 Sheet 名,Value 为 DataFrame。

import pandas as pd# 读取所有 Sheetexcel_data = pd.read_excel('data.xlsx', sheet_name=None)# 遍历所有 Sheet 名for sheet_name, df in excel_data.items():print(f"处理表: {sheet_name}, 数据行数: {len(df)}")

3. 多表垂直合并 (Concat)

当所有 Sheet 结构相同时,

# 合并所有 Sheet 并增加一列记录来源all_sheets = []for name, df in excel_data.items():    df['Source_Sheet'] = name    all_sheets.append(df)df_total = pd.concat(all_sheets, ignore_index=True)

4. 条件过滤读取

如果只需要读取符合特定命名的 Sheet

# 获取 Excel 中所有的 Sheet 名称xl = pd.ExcelFile('data.xlsx')target_sheets = [s for s in xl.sheet_names if"2026"in s]# 只读取目标 Sheetdf_list = [pd.read_excel('data.xlsx', sheet_name=s) for s in target_sheets]

5. 高级写入:多 DataFrame 写入不同 Sheet

使用 ExcelWriter 上下文管理器,避免多次 IO 开销。

with pd.ExcelWriter('output.xlsx', engine='xlsxwriter'as writer:    df_sales.to_excel(writer, sheet_name='bug数量', index=False)    df_stats.to_excel(writer, sheet_name='bug统计摘要', index=False)# 获取 xlsxwriter 句柄进行格式化    workbook = writer.book    worksheet = writer.sheets['bug分布']# 设置列宽    worksheet.set_column('A:Z'15)

6. 动态样式处理 (Styling)

对不同 Sheet 进行条件格式化:

defhighlight_high_sales(s):return ['background-color: yellow'if v > 10000else''for v in s]with pd.ExcelWriter('styled_output.xlsx'as writer:# 只对特定 Sheet 应用样式    df.style.apply(highlight_high_sales, subset=['Amount'])\      .to_excel(writer, sheet_name='高额预警', index=False)

注意点

  • • 内存溢出:如果 Excel 文件超过 500MB,建议使用 pd.read_excel(..., engine='openpyxl', usecols=['A', 'B']) 仅读取需要的列。
  • • 日期处理:Excel 存储日期有时会乱码,建议读取后执行 pd.to_datetime() 强制转换。
  • • 合并单元格:Pandas 读取合并单元格时,除首行外其余会被填充为 NaN,处理前需执行 df.ffill()
#panadas #excel