记录下pandas操作sheet 一些语句
1. 环境依赖
pip install pandas openpyxl xlsxwriter2. 批量读取:一行代码加载全表
使用 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()。
夜雨聆风