Pandas处理DataFrame日期列:保持date格式与自定义格式问题
解决方案
一、确保字段始终保持date格式
问题核心是Excel没有严格匹配Python date类型的格式,pandas读取Excel时会默认把日期类数据转为datetime64类型。可以通过两种方式处理:
方式1:读取后强制转换
每次读取Excel文件后,重新执行转换代码,保证DataFrame中该字段为Pythondate对象:import pandas as pd df = pd.read_excel("your_file.xlsx") df["Value date"] = pd.to_datetime(df["Value date"]).dt.date方式2:写入时存为字符串(需权衡)
如果不需要对该字段做日期运算,可以把date对象转为固定格式的字符串后写入,读取后会保持字符串格式:df["Value date"] = pd.to_datetime(df["Value date"]).dt.strftime("%d/%m/%Y") df.to_excel("your_file.xlsx", index=False)
二、指定显示格式为"31/07/2023"
分两种场景处理:
场景1:保留日期可运算特性
用xlsxwriter引擎设置Excel单元格的日期显示格式,既保留日期类型,又按指定格式展示:
- 先安装依赖:
pip install xlsxwriter - 写入时配置格式:
读取后再执行import pandas as pd # 保持字段为datetime类型(不要转成date对象,否则无法设置格式) df["Value date"] = pd.to_datetime(df["Value date"]) writer = pd.ExcelWriter("your_file.xlsx", engine="xlsxwriter") df.to_excel(writer, index=False, sheet_name="Sheet1") # 创建日期格式 workbook = writer.book worksheet = writer.sheets["Sheet1"] date_format = workbook.add_format({"num_format": "dd/mm/yyyy"}) # 应用格式到目标列(假设"Value date"是第2列,索引从0开始为1) worksheet.set_column(1, 1, None, date_format) writer.close()df["Value date"] = pd.to_datetime(df["Value date"]).dt.date,即可回到Pythondate对象。
场景2:无需日期运算
直接将日期转为指定格式的字符串,写入后Excel显示为31/07/2023:
df["Value date"] = pd.to_datetime(df["Value date"]).dt.strftime("%d/%m/%Y")
内容的提问来源于stack exchange,提问作者user22220347
相关产品推荐
相关产品推荐

