从SQL提取数据导出到Excel时日期格式自动变更,如何停止该自动转换?
问题原因
pandas从SQL读取datetime类型字段时会默认解析为datetime64类型,调用to_excel导出时Excel会自动适配本地默认日期显示格式,导致原有的带毫秒的完整时间格式被修改。手动复制SQL查询结果时相当于粘贴纯文本字符串,不会触发Excel的格式自动转换,因此格式正常。
解决方法
方案1:导出前将日期列转为指定格式的字符串
直接把日期字段按照你需要的格式转成字符串,避免Excel自动识别为日期类型,修改循环部分代码即可:
for i, iter in zip(input_lines, file_name_lines): df = pd.read_sql(i, cnxn) # 遍历所有datetime类型的列,转成指定格式字符串 for col in df.select_dtypes(include=['datetime64', 'datetime64[ns]']).columns: df[col] = df[col].dt.strftime('%Y-%m-%d %H:%M:%S.%f').str[:-3] # 截取到毫秒,去掉最后三位微秒 df.to_excel('{}.xlsx'.format(iter), index=False) print(iter,' is Done')
注意:这个方案导出后日期字段是文本类型,无法直接在Excel里做日期计算,如果需要保留日期类型属性请用方案2
方案2:使用ExcelWriter指定Excel的日期显示格式
导出时强制设置Excel的日期显示格式,既保留日期类型,又能按你要的格式显示:
for i, iter in zip(input_lines, file_name_lines): df = pd.read_sql(i, cnxn) with pd.ExcelWriter('{}.xlsx'.format(iter), engine='xlsxwriter', datetime_format='yyyy-mm-dd hh:mm:ss.000') as writer: df.to_excel(writer, index=False) print(iter,' is Done')
这个方案需要提前安装xlsxwriter库,执行pip install xlsxwriter即可安装
内容的提问来源于stack exchange,提问作者Chandru
相关产品推荐
相关产品推荐

