Pandas设置Excel表格第一行的格式

我想给Pandas导出的表格设置第一行为特定格式,包括索引也是特定格式。
运行代码后却变成这样了,第一个单元格是空白,既没有内容也没有格式。

import pandas as pd
import numpy as np
from openpyxl.styles import PatternFill
import datetime
roatIn = r'F:\Desktop\Python数据分析\2.1加急单子自动生成\roatIn.xlsx'
roatOut = r'F:\Desktop\Python数据分析\2.1加急单子自动生成\roatOut.xlsx'
kblc = pd.read_excel(roatIn,dtype = {'用户编号':str,'联系电话':str,'水表编号':str,'查表时间':np.datetime64})
kbbx_excel = kblc.loc[:,['用户编号','用户名称','片区','用户地址','水表种类','水表编号','联系电话','产权人电话',
                         '查表员','查表时间',' 用户已购字轮读数',' 字轮读数','异常种类原因','用水分类','备注']]
kbbx_excel = kbbx_excel.set_index(kbbx_excel.columns[0])
kbbx_excel.rename(columns = {'备注':'抄表员备注'},inplace = True)
kbbx_excel.loc[:, '上报日期'] = datetime.date.today()
kbbx_excel.loc[:, '水表科备注'] = ''
writer = pd.ExcelWriter('test1.xlsx', engine='xlsxwriter')
workbook = writer.book
#worksheet = workbook.get_worksheet_by_name('Sheet1')
worksheet = workbook.add_worksheet('Summary')
writer.sheets['Summary'] = worksheet
header_format = workbook.add_format({
    'bg_color': '#21AD25',  

    'bold': True,          

    'text_wrap': True,

    'valign': 'top',

    'align': 'center',

    'border': 1
})
for col_num,value in enumerate(kbbx_excel.columns.values):
    print(col_num)
    print(value)
    worksheet.write(0, col_num + 1, value, header_format)
    

writer.save()
writer.close()

img

改成这样试试:

import pandas as pd
import numpy as np
from openpyxl.styles import PatternFill
import datetime
roatIn = r'F:\Desktop\Python数据分析\2.1加急单子自动生成\roatIn.xlsx'
roatOut = r'F:\Desktop\Python数据分析\2.1加急单子自动生成\roatOut.xlsx'
kblc = pd.read_excel(roatIn,dtype = {'用户编号':str,'联系电话':str,'水表编号':str,'查表时间':np.datetime64})
kbbx_excel = kblc.loc[:,['用户编号','用户名称','片区','用户地址','水表种类','水表编号','联系电话','产权人电话',
                         '查表员','查表时间',' 用户已购字轮读数',' 字轮读数','异常种类原因','用水分类','备注']]
kbbx_excel = kbbx_excel.set_index(kbbx_excel.columns[0])
kbbx_excel.rename(columns = {'备注':'抄表员备注'},inplace = True)
kbbx_excel.loc[:, '上报日期'] = datetime.date.today()
kbbx_excel.loc[:, '水表科备注'] = ''
writer = pd.ExcelWriter('test1.xlsx', engine='xlsxwriter')
workbook = writer.book
worksheet = workbook.add_worksheet('Summary')
writer.sheets['Summary'] = worksheet
header_format = workbook.add_format({
    'bg_color': '#21AD25',  
    'bold': True,          
    'text_wrap': True,
    'valign': 'top',
    'align': 'center',
    'border': 1
})
for col_num,value in enumerate(kbbx_excel.columns.values):
    worksheet.write(0, col_num, value, header_format)
    
 
writer.save()
writer.close()


【以下回答由 GPT 生成】

由于代码中对第一行的处理是通过将索引转换为列,并在第一行写入数据的方式来实现的,所以需要对代码进行一些修改来设置第一行的格式。

首先,需要导入pandasnumpyopenpyxl库:

import pandas as pd
import numpy as np
from openpyxl.styles import PatternFill

接下来,读取Excel表格数据,并指定列的数据类型:

kblc = pd.read_excel(roatIn, dtype={
    '用户编号': str,
    '联系电话': str,
    '水表编号': str,
    '查表时间': np.datetime64
})

然后,选择需要写入的列,并将索引转换为列,并进行列名的重命名和添加额外的列数据:

kbbx_excel = kblc.loc[:, ['用户编号', '用户名称', '片区', '用户地址', '水表种类', '水表编号', '联系电话', '产权人电话',
                         '查表员', '查表时间', ' 用户已购字轮读数', ' 字轮读数', '异常种类原因', '用水分类', '备注']]
kbbx_excel = kbbx_excel.set_index(kbbx_excel.columns[0])
kbbx_excel.rename(columns={'备注': '抄表员备注'}, inplace=True)

kbbx_excel.loc[:, '上报日期'] = datetime.date.today()
kbbx_excel.loc[:, '水表科备注'] = ''

接着,创建一个ExcelWriter对象,并指定输出文件名和引擎为xlsxwriter

writer = pd.ExcelWriter(roatOut, engine='xlsxwriter')

获取ExcelWriter对象的工作簿和工作表:

workbook = writer.book
worksheet = workbook.add_worksheet('Summary')
writer.sheets['Summary'] = worksheet

设置第一行的格式,包括背景颜色、字体加粗、文字换行、垂直和水平对齐方式以及边框:

header_format = workbook.add_format({
    'bg_color': '#21AD25',
    'bold': True,
    'text_wrap': True,
    'valign': 'top',
    'align': 'center',
    'border': 1
})

遍历kbbx_excel的列名,将列名写入第一行,并应用格式:

for col_num, value in enumerate(kbbx_excel.columns.values):
    worksheet.write(0, col_num + 1, value, header_format)

最后,将数据写入Excel表格并保存:

kbbx_excel.to_excel(writer, sheet_name='Summary', startrow=1)
writer.save()

以上就是修改后的代码,可以正确设置Excel表格的第一行格式,并包括索引在内。

完整修改后的代码如下:

import pandas as pd
import numpy as np
from openpyxl.styles import PatternFill
import datetime

roatIn = r'F:\Desktop\Python数据分析\2.1加急单子自动生成\roatIn.xlsx'
roatOut = r'F:\Desktop\Python数据分析\2.1加急单子自动生成\roatOut.xlsx'

kblc = pd.read_excel(roatIn, dtype={
    '用户编号': str,
    '联系电话': str,
    '水表编号': str,
    '查表时间': np.datetime64
})

kbbx_excel = kblc.loc[:, ['用户编号', '用户名称', '片区', '用户地址', '水表种类', '水表编号', '联系电话', '产权人电话',
                         '查表员', '查表时间', ' 用户已购字轮读数', ' 字轮读数', '异常种类原因', '用水分类', '备注']]
kbbx_excel = kbbx_excel.set_index(kbbx_excel.columns[0])
kbbx_excel.rename(columns={'备注': '抄表员备注'}, inplace=True)

kbbx_excel.loc[:, '上报日期'] = datetime.date.today()
kbbx_excel.loc[:, '水表科备注'] = ''

writer = pd.ExcelWriter(roatOut, engine='xlsxwriter')
workbook = writer.book
worksheet = workbook.add_worksheet('Summary')
writer.sheets['Summary'] = worksheet

header_format = workbook.add_format({
    'bg_color': '#21AD25',
    'bold': True,
    'text_wrap': True,
    'valign': 'top',
    'align': 'center',
    'border': 1
})

for col_num, value in enumerate(kbbx_excel.columns.values):
    worksheet.write(0, col_num + 1, value, header_format)

kbbx_excel.to_excel(writer, sheet_name='Summary', startrow=1)
writer.save()

请注意,需要根据你的实际情况修改roatInroatOut的路径。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^