pandas excel合并单元格
时间: 2025-03-03 15:41:47 浏览: 70
### 使用 Pandas 处理 Excel 中的合并单元格
当使用 `pandas` 库来处理包含合并单元格的 Excel 文件时,需要注意的是 `pandas` 并不直接支持读取或写入带有合并单元格的信息。然而,可以通过其他库如 `openpyxl` 或者自定义逻辑来间接实现这一功能。
对于读取含有合并单元格的 Excel 文件并将其转换成 DataFrame 的情况:
```python
import pandas as pd
file_path = 'example_with_merged_cells.xlsx'
df = pd.read_excel(file_path, engine='openpyxl')
print("原始数据:")
print(df)
```
这段代码会尝试加载指定路径下的 Excel 文件到一个新的 DataFrame 对象中[^2]。但是,默认情况下,`read_excel()` 函数不会保留原表中的任何格式化信息(比如合并单元格),它只会提取数值内容填充至 DataFrame 表格结构里。
为了写出带合并单元格效果的新 Excel 文件,则可以采用如下方式:
```python
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Alignment
def write_dataframe_with_merge(df, output_file, merge_columns=None):
wb = Workbook()
ws = wb.active
# 将 DataFrame 写入工作簿
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
if merge_columns is not None and isinstance(merge_columns, list):
prev_values = {}
for col_name in merge_columns:
column_index = df.columns.get_loc(col_name) + 1
start_row = end_row = None
for row_idx, value in enumerate(df[col_name], start=1):
cell = ws.cell(row=row_idx+1, column=column_index)
if (value != prev_values.get(col_name)) or ((row_idx == len(df)+1)):
if start_row is not None:
ws.merge_cells(start_row=start_row+1,
start_column=column_index,
end_row=end_row+1,
end_column=column_index)
merged_cell = ws[f'{chr(column_index+64)}{start_row+1}']
merged_cell.alignment = Alignment(horizontal="center", vertical="center")
start_row = end_row = row_idx
elif value == prev_values.get(col_name):
end_row += 1
prev_values[col_name] = value
wb.save(output_file)
# 创建测试用 DataFrame
test_df = pd.DataFrame({
"A": ["X", "Y"],
"B": [1, 2],
})
write_dataframe_with_merge(test_df, "output_with_merged_cells.xlsx", ['A'])
```
上述函数接受一个 DataFrame (`df`) 及目标文件名作为输入参数,并允许通过可选参数 `merge_columns` 来指明哪些列应该被考虑做合并操作。该脚本遍历每一行,在发现连续相同值的情况下就会执行相应的合并动作[^3]。
阅读全文
相关推荐


















