如何加快DatetimeIndex处理?

时间:2015-10-02 18:57:51

标签: python pandas datetime dataframe datetimeindex

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

尝试

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