Как преобразовать ненормальную временную метку в дату и время в фрейме данных Pandas

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

В:

import requests
import json

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

ВНЕ:

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, а затем разбивал его на два столбца:

В:

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']]

ВНЕ:

'     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

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

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

Просто pd.to_datetime(df) работает.

cs95 30.01.2019 00:13

Эта «Т» не прикольная, это часть Стандарт ИСО-8601.

Mark Ransom 30.01.2019 00:22

@MarkRansom Спасибо за информацию - я понятия не имел!

NElise 31.01.2019 19:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
1 559
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

>>> 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.

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

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

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

В:

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

ВНЕ:

Timestamp('2019-01-29 21:11:15')

Другие вопросы по теме