You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中datetime类型转换、格式保留及合并后类型维持问题

解决方案

一、同时保留datetime64类型与Excel导出格式

你用dt.strftime()把日期转成字符串(object类型)是核心问题。要兼顾DataFrame内为datetime64类型和Excel导出显示dd/mm/yyyy格式,按以下步骤操作:

  1. 正确转换为datetime64类型
    直接将first_known_date转为datetime类型,无需转成字符串:
# 直接转换为datetime64[ns],保留日期时间完整信息
mydf['Datum'] = pd.to_datetime(mydf['first_known_date'], format='%d-%m-%Y %H:%M:%S')

# 若仅需日期部分(去掉时分秒),用floor保留datetime类型
mydf['Datum'] = pd.to_datetime(mydf['first_known_date'], format='%d-%m-%Y %H:%M:%S').dt.floor('D')

此时Datum列类型为datetime64[ns],Pandas默认显示不影响实际存储类型。

  1. 导出Excel时设置显示格式
    用xlsxwriter引擎给日期列指定单元格格式,确保Excel中显示为dd/mm/yyyy:
import pandas as pd

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
mydf.to_excel(writer, sheet_name='Sheet1', index=False)

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

# 定义dd/mm/yyyy格式
date_format = workbook.add_format({'num_format': 'dd/mm/yyyy'})

# 获取Datum列的索引位置
datum_col_idx = mydf.columns.get_loc('Datum')
# 应用格式到整列
worksheet.set_column(datum_col_idx, datum_col_idx, None, date_format)

writer.close()

二、合并DataFrame后日期类型丢失的解决方法

合并后类型丢失,通常是因为两个DataFrame的日期列类型不一致(一个是datetime64,一个是object),Pandas会自动兼容为object类型。解决步骤:

  1. 合并前统一日期列类型
    确保待合并的两个DataFrame中,日期列都转为datetime64[ns]:
# 假设另一个DataFrame是df_other,日期列名为Datum
# 根据实际格式调整format参数,比如原格式是dd/mm/yyyy就写'%d/%m/%Y'
df_other['Datum'] = pd.to_datetime(df_other['Datum'], format='%d/%m/%Y')
  1. 执行合并操作
    此时合并后的日期列会保留datetime64类型:
merged_df = pd.concat([mydf, df_other], ignore_index=True)
# 验证类型
print(merged_df['Datum'].dtype) # 输出应为datetime64[ns]

若用merge关联数据,同样要确保关联的日期列类型一致,避免匹配失败或类型转换问题。

内容的提问来源于stack exchange,提问作者Tralala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:33:24