使用 pandas.to_excel 时格式化 timedelta64

00_*_*_00 6 python timedelta pandas

我正在使用以下命令写入 excel 文件ExcelWriter

writer = pd.ExcelWriter(fn,datetime_format=' d  hh:mm:ss')
df.to_excel(writer,sheet_name='FOO')
Run Code Online (Sandbox Code Playgroud)

写入操作成功,打开相应的excel文件,我看到日期时间按照要求格式很好。但是,带有 dtype 的数据框的另一列timedelta64[ns]会自动转换为数值,因此在 Python 中我看到

0 days 00:23:33.499998
Run Code Online (Sandbox Code Playgroud)

在 excel 中:

 0.016359954
Run Code Online (Sandbox Code Playgroud)

这可能与以天数换算的持续时间相同。有什么方法可以使用控制 timedelta 格式pd.ExcelWriter?

chr*_*isb 6

Excel 没有 timedelta 或等效数据类型,因此您有几个不完美的选择。

要在 Excel 中保留它们的“日期时间”,您可以转换为日期时间,然后在 Excel 中以仅显示时间部分的格式显示它们。

df = pd.DataFrame({'td': [pd.Timedelta(1, 'h'), pd.Timedelta(1.5, 'h')]})
df['td_datetime']
df['td_datetime'] = df['td'] + pd.Timestamp(0)

writer = pd.ExcelWriter('tmp.xlsx', datetime_format='hh:mm:ss')
df.to_excel(writer)
# tmp.xlsx
# td         td_datetime
# 0.041667   01:00:00
# 0.0625     01:30:00
Run Code Online (Sandbox Code Playgroud)

或者,您可以在序列化之前格式化为字符串:

df['td_str'] = df['td'].astype(str)

df
Out[24]: 
        td                     td_str
0 01:00:00  0 days 01:00:00.000000000
1 01:30:00  0 days 01:30:00.000000000
Run Code Online (Sandbox Code Playgroud)