Как определить, в каком формате значения `datetime` отображаются, когда на консоли Python отображается DataFrame? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть пандас DataFrame df с несколькими datetime столбцами. В консоли 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, меня интересует только часть date значения datetime. Как я могу сказать pandas отображать DataFrame на консоли только с частями даты datetime значений?

Я ищу что-то вроде display.precision , но для datetimes не для floats. Или каким-то образом (глобально?) Переписать функцию преобразования даты в строку в pandas.


Обратите внимание: Я не после изменения значений в столбцах datetime на даты или после добавления новых столбцов с укороченными полями, а скорее я ищу измените отображение столбцов datetime только в консоли.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Попробуйте что-то вроде этого ....

Давайте создадим некоторую дату .... (Извините, я слишком ленив)

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.

Надеюсь, это поможет.

0 голосов
/ 26 марта 2019
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['date3'] = df['date1'].apply(datetime.date)
df['date4'] = df['date2'].apply(datetime.date)
df
...