Печатайте только секунды для столбцов времени Unix в пандах DataFrame - PullRequest
0 голосов
/ 30 апреля 2018

Вот фрагмент, который загружает частичные данные свечи в DataFrame Pandas. Что меня интересует, так это распечатать содержимое DataFrame. Я хочу, чтобы два миллисекундных столбца метки времени Unix отображались в секундах.

Вот необработанные данные:

rawData = {'t': 1525019820000, 'T': 1525019879999, 'o': '0.07282300', 'c': '0.07290700', 'h': '0.07293300', 'l': '0.07279800', 'v': '48.57300000'}

Этот код выводит полную дату для каждого столбца отметки времени:

import pandas as pd

rawData = {'t': 1525019820000, 'T': 1525019879999, 'o': '0.07282300', 'c': '0.07290700', 'h': '0.07293300', 'l': '0.07279800', 'v': '48.57300000'}

df = pd.DataFrame([rawData])
df['t'] = pd.to_datetime(df['t'], unit='ms') # converting unix ts to datetime
df['T'] = pd.to_datetime(df['T'], unit='ms')
print(df.to_string(justify='center', columns=['t','T','o','c','h','l','v'], header=['from','to','open','close','high','low','vol']))

Выход:

          from                   to               open       close        high        low         vol     
0 2018-04-29 16:37:00 2018-04-29 16:37:59.999  0.07282300  0.07290700  0.07293300  0.07279800  48.57300000

Как я могу отображать только временную часть двух временных столбцов, получая это вместо этого?

    from      to        open       close        high        low         vol     
0 16:37:00 16:37:59  0.07282300  0.07290700  0.07293300  0.07279800  48.57300000

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Решением является использование formatters = parm метода DataFrame.to_string. как задокументировано здесь . Лямбды определяются в словаре форматеров, используя ключевые имена столбцов ...

formatters={'t': lambda x: x.strftime("%H:%M:%S"), 'T': lambda x: x.strftime("%H:%M:%S")}

и вот весь код:

import pandas as pd

rawData = {'t': 1525019820000, 'T': 1525019879999, 'o': '0.07282300', 'c': '0.07290700', 'h': '0.07293300', 'l': '0.07279800', 'v': '48.57300000'}

df = pd.DataFrame([rawData])
df['t'] = pd.to_datetime(df['t'], unit='ms')
df['T'] = pd.to_datetime(df['T'], unit='ms')
print(df.to_string(justify='center', columns=['t','T','o','c','h','l','v'], header=['from','to','open','close','high','low','vol'],  formatters={'t': lambda x: x.strftime("%H:%M:%S"), 'T': lambda x: x.strftime("%H:%M:%S")}))

который выводит

    from      to        open       close        high        low         vol     
0 16:37:00 16:37:59  0.07282300  0.07290700  0.07293300  0.07279800  48.57300000
0 голосов
/ 30 апреля 2018

Вы можете использовать параметр formatters ( документы ):

print(df.to_string(justify='center', columns=['t','T','o','c','h','l','v'],
                   formatters={'t': lambda x: '{:%H:%M:%S}'.format(pd.to_datetime(x, unit="D")),
                               'T': lambda x: '{:%H:%M:%S}'.format(pd.to_datetime(x, unit="D"))},
                   header=['from','to','open','close','high','low','vol']))
...