3

我有一个大熊猫 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'
4

2 回答 2

3

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

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

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

于 2015-10-02T19:17:05.633 回答
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
于 2015-10-02T19:07:22.693 回答