如何在pandas中让时间为00:00:00的列在jupyter/html中显示完整datetime
问题说明
若pandas DataFrame某一整列的datetime类型数据时间部分均为00:00:00,默认展示时会省略时间部分仅显示日期,该场景下容易让用户混淆列类型是date还是datetime。
复现代码
import pandas as pd from datetime import datetime df = pd.DataFrame([ (datetime(2021,10,3,0,0,0), datetime(2021,10,3,1,1,1)), (datetime(2021,10,3,0,0,0), datetime(2021,10,3,1,1,1)), ]) df
查看实际存储的完整时间可以调用df.values,输出如下:
array([['2021-10-03T00:00:00.000000000', '2021-10-03T01:01:01.000000000'], ['2021-10-03T00:00:00.000000000', '2021-10-03T01:01:01.000000000']], dtype='datetime64[ns]')
Jupyter默认的DataFrame渲染逻辑调用df.to_html()实现,生成的表格同样会省略00:00:00部分:
<table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>0</th> <th>1</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>2021-10-03</td> <td>2021-10-03 01:01:01</td> </tr> <tr> <th>1</th> <td>2021-10-03</td> <td>2021-10-03 01:01:01</td> </tr> </tbody> </table>
现有临时方案需要手动调用style渲染输出,需求是直接通过notebook常规单元格输出即可显示完整时间。
解决方案
方案1:全局配置pandas显示格式(推荐)
在notebook初始化时添加一行配置,统一所有datetime类型的显示格式,即可覆盖默认的省略逻辑:
import pandas as pd pd.set_option('display.datetime_format', '%Y-%m-%d %H:%M:%S')
配置完成后,所有后续输出的DataFrame中的datetime列都会完整显示年月日时分秒,无需额外修改代码。
方案2:针对单个DataFrame自定义格式
如果不想修改全局配置,仅需要对特定DataFrame做格式控制,直接返回格式化后的style对象即可,无需手动调用display:
# 按列指定格式,列如果有名称可将数字键替换为列名 df.style.format({ 0: lambda x: x.strftime('%Y-%m-%d %H:%M:%S'), 1: lambda x: x.strftime('%Y-%m-%d %H:%M:%S') })
内容的提问来源于stack exchange,提问作者Thijs
相关产品推荐
相关产品推荐

