用python将新建的df按两列分组,两个列名分别为表名和sheeet名,把分组后的df按顺序输出到已有excel中的倒数第二个sheet,表头填充为浅蓝色,全表加边框,居中
时间: 2024-05-11 08:16:38 浏览: 96
可以使用 pandas 和 openpyxl 库来实现。
首先,假设你已经创建了一个名为 `my_excel.xlsx` 的 Excel 文件,并且在其中新建了一个名为 `new_sheet` 的工作表,并且在 Python 中已经读取了该文件并将其存储在一个名为 `df` 的 pandas DataFrame 中。
接下来,你可以按以下步骤进行操作:
1. 首先安装必要的库:
```python
pip install pandas openpyxl
```
2. 导入库:
```python
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, Font
```
3. 按两列分组:
```python
grouped = df.groupby(['表名', 'sheeet名'])
```
4. 将分组后的 DataFrame 按顺序输出到 Excel 文件的倒数第二个工作表:
```python
# 加载 Excel 文件
file_path = 'my_excel.xlsx'
book = load_workbook(file_path)
# 获取倒数第二个工作表
sheet_name = book.sheetnames[-2]
writer = pd.ExcelWriter(file_path, engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
sheet = writer.sheets[sheet_name]
# 将分组后的 DataFrame 输出到工作表
i = 2
fill = PatternFill("solid", fgColor="BDE5F8") # 填充颜色为浅蓝色
border = Border(left=Side(border_style='thin', color='000000'),
right=Side(border_style='thin', color='000000'),
top=Side(border_style='thin', color='000000'),
bottom=Side(border_style='thin', color='000000')) # 加边框
alignment = Alignment(horizontal='center', vertical='center') # 居中
header_font = Font(b=True) # 粗体
for name, group in grouped:
group.to_excel(writer, sheet_name=sheet_name, startrow=i, index=False, header=False)
# 设置表头格式
for j, col in enumerate(group.columns):
cell = sheet.cell(row=i-1, column=j+1)
cell.value = col
cell.fill = fill
cell.border = border
cell.alignment = alignment
cell.font = header_font
i += len(group) + 2 # 分组之间隔两行
writer.save()
```
这段代码将分组后的 DataFrame 输出到倒数第二个工作表中,每个分组之间隔两行,并设置了表头格式。你可以根据自己的需要修改填充颜色、边框样式、居中方式和表头字体等。此外,如果需要排除某些列,可以在分组之前使用 `df.drop(columns=['column1', 'column2', ...])` 方法删除不需要的列。
阅读全文