如何加速 DatetimeIndex 处理?

How to speed up DatetimeIndex processing?

我有一个很大的 pandas 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'

您似乎每次都在解析日期,而不是一次解析所有日期。此外,使用 to_datetime() 方法可能会更快。

尝试

df['parsedDate'] = pd.to_datetime(df['Date'])
df['Year'] = pd.parsedDate.year
df['Month'] = pd.parsedDate.month
df['Weekday'] = pd.parsedDate.weekday

您声明您的列已经是 datetime64 类型。在这种情况下,您可以简单地使用 .dt accessor 来公开与列中的日期时间值关联的方法和属性:

df['Year'] = df.Date.dt.year

这比写 pd.DatetimeIndex(df.Date).year 要快得多,后者先创建一个全新的索引对象。