首页 > 解决方案 > 如何定义在 Python 控制台上显示 DataFrame 时以哪种格式显示 `datetime` 值?

问题描述

我有一个df带有几datetime列的 pandas DataFrame。在 Python 控制台中,帧的示例显示如下:

>>> df

         action             dt_completed              dt_created             dt_modified 
39       update  2010-11-07 22:04:48.668 2010-06-07 07:23:40.536 2017-07-17 06:12:48.059 
6056    release  2010-03-25 10:44:42.575 2010-03-24 17:21:54.751 2017-07-17          NaN 
5913    publish  2018-12-15 11:12:13.000 2018-12-14 00:30:58.393 2018-12-15 11:12:17.441 
7589     create  2011-09-03 22:55:23.656 2011-08-11 12:48:23.543 2011-09-03 22:55:23.656 

当我探索 DataFrame 时,我只对查看值的日期部分感兴趣datetime。如何告诉 pandas在控制台上仅显示值的日期部分的DataFrame datetime

我正在寻找类似display.precision的东西,但datetimes不是 for floats。或者以某种方式(全局?)覆盖熊猫的日期时间到字符串的转换功能。


请注意:我不是在将列中的值更改datetime为日期或添加带有缩短字段的新列之后,而是我只想在控制台中更改列的显示。datetime

标签: pythonpandasdatetimedataframedatetime-format

解决方案


尝试这样的事情......

让我们创建一些日期......(对不起,我太懒了)

import pandas as pd
from datetime import datetime
data={'1':[datetime.now(),datetime.now()],
      '2':[datetime.now(),datetime.now()],
      '3':[datetime.now(),datetime.now()]}

df=pd.DataFrame.from_dict(data,orient='index')
df.columns=['date1','date2']

我可以看到数据....

df.head()

就像是

    date1   date2
1   2019-03-26 12:28:51.080622  2019-03-26 12:28:51.080627
2   2019-03-26 12:28:51.080628  2019-03-26 12:28:51.080628
3   2019-03-26 12:28:51.080629  2019-03-26 12:28:51.080630

我使用自定义样式

def mydateformat(date):
    return "{}-{}-{}".format(date.year, date.month, date.day)

df2=df.style.format({'date1':mydateformat})
df2

这表明

    date1       date2
1   2019-3-26   2019-03-26 12:41:02.834557
2   2019-3-26   2019-03-26 12:41:02.834558
3   2019-3-26   2019-03-26 12:41:02.834560

检查它没有改变 date1 列

df['diff']=-1
df['diff']=df.date1-df.date2

并再次查看....

df2 

我明白了 - 这是 df 中的新列,具有 df2 中的样式。

    date1   date2
1   2019-3-26   2019-03-26 12:42:14.417441  -1 days +23:59:59.999995
2   2019-3-26   2019-03-26 12:42:14.417443  -1 days +23:59:59.999999
3   2019-3-26   2019-03-26 12:42:14.417444  -1 days +23:59:59.999999

时间戳准确性引起的轻微舍入......不是 date1 列上的舍入。

希望有帮助。


推荐阅读