导出Pandas DataFrame至Excel时日期格式不符的技术问询
解决Pandas导出Excel时日期带时间的问题
问题分析
你的代码存在两个关键问题:
groupby('Date')后,Date成为了DataFrame的索引而非普通列,后续CasesperDay_df['Date'] = ...是新增了一列,并没有修改导出时使用的索引日期。- 日期转换代码写在了
to_excel之后,根本不会作用到已导出的文件中。
解决方案
方法1:转换索引为日期格式后导出
先将索引的datetime类型转换为仅日期格式,再执行导出:
import pandas as pd # 读取数据 df = pd.read_excel(r'C:\Users\Python\data.xlsx') # 分组聚合 CasesperDay_df = df.groupby('Date').agg({'cases':'sum'}) # 将索引的datetime转换为仅日期(去除时间部分) CasesperDay_df.index = pd.to_datetime(CasesperDay_df.index).date # 导出到Excel CasesperDay_df.to_excel(r"C:\Users\Python\output.xlsx", sheet_name = 'Cases per Day')
方法2:使用ExcelWriter指定单元格日期格式
这种方法可以直接在导出时设置Excel单元格的日期显示格式,无需修改DataFrame的数据类型:
import pandas as pd # 读取数据 df = pd.read_excel(r'C:\Users\Python\data.xlsx') # 分组聚合 CasesperDay_df = df.groupby('Date').agg({'cases':'sum'}) # 使用ExcelWriter设置日期格式 with pd.ExcelWriter(r"C:\Users\Python\output.xlsx", engine='xlsxwriter') as writer: CasesperDay_df.to_excel(writer, sheet_name='Cases per Day') # 获取工作表对象 worksheet = writer.sheets['Cases per Day'] # 设置第一列(索引列)的日期格式为YYYY-MM-DD date_format = writer.book.add_format({'num_format': 'yyyy-mm-dd'}) worksheet.set_column('A:A', None, date_format)
方法3:将索引转为列后处理
如果更习惯操作列而非索引,可以先把索引转为列,处理后再导出:
import pandas as pd # 读取数据 df = pd.read_excel(r'C:\Users\Python\data.xlsx') # 分组聚合并重置索引(将Date转为列) CasesperDay_df = df.groupby('Date').agg({'cases':'sum'}).reset_index() # 转换日期格式 CasesperDay_df['Date'] = pd.to_datetime(CasesperDay_df['Date']).dt.date # 导出到Excel CasesperDay_df.to_excel(r"C:\Users\Python\output.xlsx", sheet_name = 'Cases per Day', index=False)
内容的提问来源于stack exchange,提问作者Talha Ahmad
相关产品推荐
相关产品推荐

