XLSX编剧和Pandas报道

2024-09-29 19:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个基本的excel报表。你知道吗

我试图显示一个数据框以及一些自定义文本/标题,而不是数据框的一部分。你知道吗

然而,我只能得到一个或另一个。我不太明白数据帧出现(workbook = writer.bookworksheet = writer.sheets['Reports']所需的代码的结尾。你知道吗

这是我的密码:

writer = pd.ExcelWriter('reportTemplate.xlsx', engine='xlsxwriter')

workbook = xlsxwriter.Workbook('reportTemplate.xlsx')
worksheet = workbook.add_worksheet('Reports')

# REPORT TITLE
worksheet.write('D2','Daily In-Store Report')

workbook = xlsxwriter.Workbook('reportTemplate.xlsx')
worksheet = workbook.add_worksheet('Reports')
worksheet.write('D2','Daily In-Store Report')

reportTimes = ['Day','Week','Period','Quarter','Year']
cityList = ['ontario','bayshore','ottawa','limeridge','oshawa','scarborough','sherway','massonville','gatineau',
            'quebec','anjou','dix30','Fairview','laval','mtltrust','stbruno','gcapitale','stefoy','rivieres','chicoutimi','sherbrooke','canada']

# LOOP THROUGH FILES
rowNb = 4
for time in reportTimes:
    # TITLE
    tableTitle = time + ' report as of ...'
    worksheet.write('A'+str(rowNb),tableTitle)
    rowNb += 1

    headRow, secondHead = createHeadings(time)
    worksheet.write_row('B' + str(rowNb), headRow)  
    worksheet.write_row('B' + str(rowNb), secondHead)
    rowNb += 2

    df = pd.read_csv('fy_' + time.lower() + '.csv')
    df.set_index('legacy_id',inplace=True)
    df = df.reindex(cityList)
    print(df)

    df.to_excel(writer,sheet_name='Reports',startrow = rowNb,header=False)

    workbook  = writer.book
    worksheet = writer.sheets['Reports']

    writer.save()

由于代码是现在,它只显示数据帧


Tags: 数据dftimexlsxexcelwritewriterworkbook
1条回答
网友
1楼 · 发布于 2024-09-29 19:29:08

我不清楚您是否要在一个Excel文件中编写多个工作表。如果是这样的话,问题可能是你写了四次同样的报告。此外,这里有一些基本的尝试。把df.to_excel()放在pd.ExcelWriter()之后。然后从for循环中删除最后四行。最后,将writer.save()放在for循环结束之后。)我刚学的时候也不是很清楚。更多示例请参见this link。)

编辑:这里是完全执行的代码(带有存根数据)。其中一个关键是使用writer.sheets['Reports'] = worksheet启用对工作表的多次写入—请参见this explanation。你知道吗

dummy_df = pd.DataFrame([[10,np.NaN],[12,42],[16,np.NaN],[20,3],[25,16],[30,1],[40,19],[60,99]],columns=['legacy_id', 'b'])
writer = pd.ExcelWriter('reportTemplate.xlsx', engine='xlsxwriter')
workbook = writer.book
worksheet = workbook.add_worksheet('Reports')
writer.sheets['Reports'] = worksheet # enable multiple writes to sheet

# REPORT TITLE
worksheet.write('D2','Daily In-Store Report')

reportTimes = ['Day','Week','Period','Quarter','Year']
cityList = ['ontario','bayshore','ottawa','limeridge','oshawa','scarborough','sherway','massonville','gatineau',
            'quebec','anjou','dix30','Fairview','laval','mtltrust','stbruno','gcapitale','stefoy','rivieres','chicoutimi','sherbrooke','canada']

# LOOP THROUGH FILES
rowNb = 4
for time in reportTimes:
    # TITLE
    tableTitle = time + ' report as of ...'
    worksheet.write('A'+str(rowNb),tableTitle)
    rowNb += 1

    headRow, secondHead = "dummy head row", "dummy second head" #I don't have your createHeadings(time)
    worksheet.write_row('B' + str(rowNb), headRow)  
    worksheet.write_row('B' + str(rowNb), secondHead)
    rowNb += 2

    df = dummy_df.copy(deep=True) # pd.read_csv('fy_' + time.lower() + '.csv')
    df.set_index('legacy_id',inplace=True)
    df = df.reindex(cityList)
    #print(df)
    df.to_excel(writer,sheet_name='Reports', startrow = rowNb)
    rowNb += df.shape[0] #gives row count

writer.save()

相关问题 更多 >

    热门问题