【问题标题】:Changing header format python pandas to excel将标题格式 python pandas 更改为 excel
【发布时间】:2020-09-18 17:01:51
【问题描述】:

是否有机会更改写入 excel 文件的 pandas 数据框的标题格式。 也许这很不寻常,但我的标题由日期和时间组成,我希望 excel 文件的“单元格格式”为“日期格式”。

我尝试过这样的事情:

import pandas as pd

data = pd.DataFrame({'1899-12-30 00:00:00': [1.5,2.5,3.5,4.5,5.4]})

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

data.to_excel(writer, sheet_name='Sheet1',index=True)
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

date_fmt = workbook.add_format({'num_format': 'dd.mm.yyyy  hh:mm:ss'})
worksheet.set_row(0, 20, date_fmt)

writer.save()

但 set_row 似乎不会更改标题格式。我还将日期转换为 excel 序列日期值,但这也无济于事。

【问题讨论】:

    标签: python pandas date header


    【解决方案1】:

    您需要做一些事情才能使其正常工作。

    第一个是避免使用 Pandas 默认标题,因为这将设置一个不能被set_row() 覆盖的单元格标题。最好的办法是跳过默认标题并编写自己的标题(请参阅 XlsxWriter 文档的Formatting of the Dataframe headers 部分)。

    其次,Excel 中的日期是格式化的数字,因此您需要将字符串标题转换为数字,或者更好地转换为日期时间对象(请参阅文档的 Working with Dates and Time 部分)。

    最后,“1899-12-30”在 Excel 中不是有效日期。

    这是一个包含其中一些修复的工作示例:

    import pandas as pd
    from datetime import datetime
    
    data = pd.DataFrame({'2020-09-18 12:30:00': [1.5, 2.5, 3.5, 4.5, 5.4]})
    
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    
    # Turn off the default header and skip one row to allow us to insert a user
    # defined header.
    data.to_excel(writer,
                  sheet_name='Sheet1', index=True,
                  startrow=1, header=False)
    
    # Get the xlsxwriter workbook and worksheet objects.
    workbook = writer.book
    worksheet = writer.sheets['Sheet1']
    
    # Add a header format.
    date_fmt = workbook.add_format({'num_format': 'dd.mm.yyyy  hh:mm:ss'})
    
    # Convert the column headers to datetime objects and write them with the
    # defined format.
    for col_num, value in enumerate(data.columns.values):
    
        # Convert the date string to a datetime object.
        date_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S')
    
        # Make the column wider for clarity.
        worksheet.set_column(col_num + 1, col_num + 1, 20)
    
        # Write the date.
        worksheet.write(0, col_num + 1, date_time, date_fmt)
    
    writer.save()
    
    

    输出

    【讨论】:

    • 非常感谢!似乎是最好的解决方案,摆脱原来的标题。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2018-03-21
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多