pandas OpenPyXL-格式化的日期列在输出Excel文件中将自己设置为“自定义”

pepwfjgg  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(98)

我需要将一个dataframe插入到Excel文件中,每个日期列的格式为DD/MM/YYYY
我使用dataframe.to_excel函数将 Dataframe 发送到输出文件中,使用ExcelWriter,并正确设置了date_formatdatetime_format参数。
该格式正确地插入到datetime对象的excel文件中,但我的输出文件决定该对象是Custom,并将其转换为YYYY-MM-DD
奇怪的是,当我编辑相应的单元格时,它们的格式正确,并且当设置为Short Date对象时,它们保持不变。我如何使这成为默认行为,以便它是我打开文件时看到的第一件事,而不必将列设置为Short Date
请注意,我需要这个工作列,而不是细胞。我使用这个程序处理大量数据,并且不希望遍历类型为datetime的每列的每个单元格。
下面是我的代码的一个非常简化的版本。

from pandas import DataFrame, ExcelWriter, to_datetime
from pandas._libs.tslibs.timestamps import Timestamp

def Send_Dataframe_To_Excel(dataframe):
        columns_of_type_datetime = list(dataframe.select_dtypes(include=["datetime", "datetime64", "datetime64[ns]", "datetimetz"]).columns)
            #find all columns of type datetime
            
        for column in columns_of_type_datetime :
            dataframe[column] = to_datetime(dataframe[column], format='%Y-%m-%d %H:%M:%S', errors='coerce').dt.date
                #convert them to pandas datetime
                
        with ExcelWriter("output_file.xlsx", engine="openpyxl", date_format='DD/MM/YYYY', datetime_format='DD/MM/YYYY') as writer:
            dataframe.to_excel(writer, sheet_name="Sheet1", index=False)

dataframe = DataFrame({'ID': [1, 2, 3, 4, 5, 6, 7],
            'text_data': ['text1', 'text2', 'text3', 'text4', 'text5', 'text6', 'text7'],
            'number_data': [11, 12, 13, 14, 15, 16, 17,],
            'date_data': [Timestamp('2011-01-01 00:20:00'), Timestamp('2012-02-02 00:00:00'), Timestamp('2013-03-03 00:00:00'), Timestamp('2014-04-04 00:00:00'), Timestamp('2015-05-05 00:00:00'), Timestamp('2016-06-06 00:00:00'), Timestamp('2017-07-07 00:00:00')]})
            
            
Send_Dataframe_To_Excel(dataframe)

下面是我在输出文件中期望的内容:

下面是输出文件的实际结果(如您所见,我可以将单元格类型永久设置为Short Date,“修复”了这个问题,但这不是默认行为。此外,“Personnalisé”表示“Custom”,“Date courte”表示“Short date”):

r1zhe5dt

r1zhe5dt1#

这是一个开放的问题(* 参见,GH44284)。
现在,您需要切换(
如果可能 )到默认引擎( 如果已安装 *,则为 * xlxwriter *):

with ExcelWriter(
    'output_file.xlsx',
    engine='xlsxwriter', # <- here
    date_format='DD/MM/YYYY',
    datetime_format='DD/MM/YYYY') \
as writer:
    dataframe.to_excel(writer, sheet_name="Sheet1", index=False)

输出:

相关问题