Как ускорить обработку 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
Другие вопросы по тегам