Как ускорить обработку DatetimeIndex?
У меня есть большой пандан DataFrame (около 1050000 записей). Один из столбцов имеет тип datetime
, Я хочу извлечь год, месяц и день недели. Проблема в том, что приведенный ниже код очень медленный:
df['Year'] = pd.DatetimeIndex(df.Date).year
df['Month'] = pd.DatetimeIndex(df.Date).month
df['Weekday'] = pd.DatetimeIndex(df.Date).weekday
Обновить:
Данные выглядят так:
Id DayOfWeek Date
0 1 5 2015-07-31
1 2 4 2015-07-30
2 3 3 2015-07-29
3 4 2 2015-07-28
4 5 1 2015-07-27
Если я делаю так:
df = pd.read_csv("data.csv", parse_dates=[2])
df['Year'] = pd.to_datetime(df['Date']).year
df['Month'] = pd.to_datetime(df['Date']).month
df['Weekday'] = pd.to_datetime(df['Date']).weekday
тогда ошибка:
AttributeError: 'Series' object has no attribute 'year'
2 ответа
Решение
Вы заявляете, что ваш столбец уже имеет тип datetime64. В этом случае вы можете просто использовать .dt
средство доступа для предоставления методов и атрибутов, связанных со значениями даты и времени в столбце:
df['Year'] = df.Date.dt.year
Это будет гораздо быстрее, чем писать pd.DatetimeIndex(df.Date).year
который сначала создает совершенно новый индексный объект.
Кажется, вы, возможно, анализируете даты каждый раз, а не все сразу. Кроме того, используя to_datetime()
метод может быть быстрее.
Пытаться
df['parsedDate'] = pd.to_datetime(df['Date'])
df['Year'] = pd.parsedDate.year
df['Month'] = pd.parsedDate.month
df['Weekday'] = pd.parsedDate.weekday