Я создаю тепловую карту использования для некоторой пользовательской аналитики. По оси 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.
Эта «Т» не прикольная, это часть Стандарт ИСО-8601.
@MarkRansom Спасибо за информацию - я понятия не имел!






Вам нужно использовать временную метку 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')
Просто
pd.to_datetime(df)работает.