Pandas中datetime类型转换、格式保留及合并后类型维持问题
解决方案
一、同时保留datetime64类型与Excel导出格式
你用dt.strftime()把日期转成字符串(object类型)是核心问题。要兼顾DataFrame内为datetime64类型和Excel导出显示dd/mm/yyyy格式,按以下步骤操作:
- 正确转换为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默认显示不影响实际存储类型。
- 导出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类型。解决步骤:
- 合并前统一日期列类型
确保待合并的两个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')
- 执行合并操作
此时合并后的日期列会保留datetime64类型:
merged_df = pd.concat([mydf, df_other], ignore_index=True) # 验证类型 print(merged_df['Datum'].dtype) # 输出应为datetime64[ns]
若用merge关联数据,同样要确保关联的日期列类型一致,避免匹配失败或类型转换问题。
内容的提问来源于stack exchange,提问作者Tralala
相关产品推荐
相关产品推荐

