使用 pandas.to_excel 时格式化 timedelta64
formatting timedelta64 when using pandas.to_excel
我正在使用 ExcelWriter
:
写入 excel 文件
writer = pd.ExcelWriter(fn,datetime_format=' d hh:mm:ss')
df.to_excel(writer,sheet_name='FOO')
写入操作成功,打开相应的excel文件我看到日期时间格式很好,符合要求。但是,dtype timedelta64[ns]
的数据框的另一列会自动转换为数值,因此在 Python 中我看到
0 days 00:23:33.499998
在 excel 期间:
0.016359954
这很可能与转换为天数的持续时间相同。
有什么方法可以使用 pd.ExcelWriter?
来控制 timedelta 格式
Excel 没有 timedelta 或等效数据类型,因此您有几个不完美的选择。
要将它们的 "datetime-ness" 保留在 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
或者,您可以在序列化之前格式化为字符串:
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
以上内容的一些补充。
Excel 零日期是 1-1-1900,而 pandas.TimeStamp(0)
给我 1-1-1970。
所以,我将代码更改为
df['td_datetime'] = df['td'] + pd.Timestamp('1900-01-01')
现在它可以正常工作(并且您可以正确添加单元格以添加时间增量)
您可能还想只显示小时数(不是 1 天 1 小时,而是 25 小时),为此您可以使用以下格式:
writer = pd.ExcelWriter('tmp.xlsx', datetime_format='[h]:mm:ss')
我正在使用 ExcelWriter
:
writer = pd.ExcelWriter(fn,datetime_format=' d hh:mm:ss')
df.to_excel(writer,sheet_name='FOO')
写入操作成功,打开相应的excel文件我看到日期时间格式很好,符合要求。但是,dtype timedelta64[ns]
的数据框的另一列会自动转换为数值,因此在 Python 中我看到
0 days 00:23:33.499998
在 excel 期间:
0.016359954
这很可能与转换为天数的持续时间相同。
有什么方法可以使用 pd.ExcelWriter?
Excel 没有 timedelta 或等效数据类型,因此您有几个不完美的选择。
要将它们的 "datetime-ness" 保留在 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
或者,您可以在序列化之前格式化为字符串:
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
以上内容的一些补充。
Excel 零日期是 1-1-1900,而 pandas.TimeStamp(0)
给我 1-1-1970。
所以,我将代码更改为
df['td_datetime'] = df['td'] + pd.Timestamp('1900-01-01')
现在它可以正常工作(并且您可以正确添加单元格以添加时间增量)
您可能还想只显示小时数(不是 1 天 1 小时,而是 25 小时),为此您可以使用以下格式:
writer = pd.ExcelWriter('tmp.xlsx', datetime_format='[h]:mm:ss')