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