我想给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()
改成这样试试:
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 生成】
由于代码中对第一行的处理是通过将索引转换为列,并在第一行写入数据的方式来实现的,所以需要对代码进行一些修改来设置第一行的格式。
首先,需要导入pandas
、numpy
和openpyxl
库:
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()
请注意,需要根据你的实际情况修改roatIn
和roatOut
的路径。
【相关推荐】