如何从Excel文件指定工作表提取指定表格并转换为CSV格式
提取Excel指定工作表中的单个表格并转为CSV格式
需求说明:
有一个Excel文件,需要从中提取指定工作表,仅将该工作表中的Overall表格转换为CSV格式。该工作表下方还有其他表格,且无法修改输入格式。目前已实现提取指定工作表的功能,但不知道如何提取单个表格,现有代码如下:
import pandas as pd from pyxlsb import open_workbook as open_xlsb # first handle xls case xls = pd.ExcelFile('sample.xlsx') # workbook has 2 sheets: sheet 1 and sheet 2 df1 = pd.read_excel(xls, 'Sheet1') df2 = pd.read_excel(xls, 'Sheet2') # print(df1.head()) # print(df2.head())
示例表格结构:
| overall | a | b | c | d |
|---|---|---|---|---|
| row 1 | 1 | 2 | 6 | 2 |
| row 2 | 2 | 5 | 2 | 4 |
| row 3 | 5 | 7 | 3 | 6 |
| row 4 | 7 | 8 | 3 | 7 |
| table 2 | l | m | n | o |
| row 1 | 1 | 35 | 5 | 887 |
| row 2 | 232 | 3 | 35 | 8 |
| row 3 | 2 | 5 | 5 | 6 |
| row 4 | 14 | 546 | 78 | 2 |
解决方案
核心思路是通过定位表头行和后续的空行分割出目标表格,具体代码如下:
import pandas as pd # 读取指定工作表,不预设表头,保留所有原始行数据 xls = pd.ExcelFile('sample.xlsx') full_sheet = pd.read_excel(xls, 'Sheet1', header=None) # 定位Overall表格的表头行(第一列值为"overall"的行) header_idx = full_sheet[full_sheet[0] == 'overall'].index[0] # 找到表头行之后的第一个全空行,作为目标表格的结束标记 empty_rows = full_sheet[(full_sheet.isnull().all(axis=1)) & (full_sheet.index > header_idx)].index end_idx = empty_rows[0] - 1 if empty_rows.size > 0 else full_sheet.index[-1] # 提取目标表格区域 overall_table = full_sheet.loc[header_idx:end_idx] # 将表头行设置为列名 overall_table.columns = overall_table.iloc[0] # 移除重复的表头行 overall_table = overall_table[1:] # 重置索引 overall_table.reset_index(drop=True, inplace=True) # 保存为CSV文件 overall_table.to_csv('overall_table.csv', index=False)
代码说明
- 读取整个工作表的所有行,不指定表头,避免自动识别表头导致的错误;
- 通过第一列的"overall"值定位目标表格的起始行;
- 找到表头行之后的第一个全空行,以此确定目标表格的结束位置;
- 提取中间区域后,将起始行设置为列名,移除重复行并重置索引;
- 最后将处理好的表格保存为CSV文件。
内容的提问来源于stack exchange,提问作者hussain sagar
相关产品推荐
相关产品推荐

