Как преобразовать ненормальную метку времени в дату и время в кадре данных Pandas - PullRequest
0 голосов
/ 30 января 2019

Я создаю карту использования для некоторой пользовательской аналитики.Ось Y будет днем ​​недели, а ось X будет часом дня (24:00).Я извлек данные из API. (Обратите внимание, что на самом деле получается 6000 строк данных)

IN:

import requests
import json

response = requests.get("api.url")
data = response.json()
df=pd.DataFrame(data['Sessions'])
df.dtypes
print(df['StartTime'])

OUT:

0     2019-01-29T22:08:40
1     2019-01-29T22:08:02
2     2019-01-29T22:05:10
3     2019-01-29T21:34:30
4     2019-01-29T21:32:49
Name: StartTime, Length: 100, dtype: object

Я бы обычнопреобразовать объект в pandas.dt, а затем разделить его на два столбца:

IN:

df['StartTime'] =  pd.to_datetime(df['StartTime'], format='%d%b%Y:%H:%M:%S.%f')
df['Date'] = [d.date() for d in df['StartTime']]
df['Time'] = [d.time() for d in df['StartTime']]

OUT:

'     StartTime                Date           Time
0     2019-01-29T22:08:40      2019-01-29     22:08:40
1     2019-01-29T22:08:02      2019-01-29     22:08:02
2     2019-01-29T22:05:10      2019-01-29     22:05:10
3     2019-01-29T21:34:30      2019-01-29     21:34:30
4     2019-01-29T21:32:49      2019-01-29     21:32:49

Это не работает из-заэта забавная буква «Т» в середине моей отметки времени и, возможно, из-за типа данных.

Мне нужно удалить букву Т, чтобы я мог преобразовать ее в стандартный формат даты и времени, а затем разделить дату и время насвои столбцы.БОНУС: Я бы хотел перенести только час в свою колонку.Вместо 22:08:02 было бы 22.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Для разбора метки времени dateutil это просто фантастика.Он может вычислять дату практически из любого строкового формата.

Чтобы получить только час из объекта datetime, вы можете использовать d.hour

0 голосов
/ 30 января 2019

Вам не нужно форматировать метку времени.Панды могут распознавать формат даты и времени как «2019-01-29T21: 34: 30».

IN:

import pandas as pd    
dt = '2019-01-29T21:34:30'    
pd.to_datetime(dt)

OUT:

Timestamp('2019-01-29 21:11:15')
0 голосов
/ 30 января 2019

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

>>> pd.Timestamp(‘2017-01-01T12’)
Timestamp(‘2017-01-01 12:00:00’)

Итак:

df['StartTime'] = df["StartTime"].apply(lambda x: pd.Timestamp(x))

#now StartTime has the correct data type so you can access
# date and time methods as well as the hour

df['Date'] = df["StartTime"].apply(lambda x: x.date())
df['Time'] = df["StartTime"].apply(lambda x: x.time())
df['Hour'] = df["StartTime"].apply(lambda x: x.hour)

Как уже упоминалось @coldspeed, вызов pd.to_datetime () или pd.Timesatmp () будет работатьпросто отлично, просто пропустите format аргументы

...