16

我想过滤掉周末数据,只查看工作日的数据(周一(0)-周五(4))。我是熊猫新手,在熊猫中实现这一目标的最佳方法是什么?

import datetime
from pandas import *

data = read_csv("data.csv")
data.my_dt 

Out[52]:
0     2012-10-01 02:00:39
1     2012-10-01 02:00:38
2     2012-10-01 02:01:05
3     2012-10-01 02:01:07
4     2012-10-01 02:02:03
5     2012-10-01 02:02:09
6     2012-10-01 02:02:03
7     2012-10-01 02:02:35
8     2012-10-01 02:02:33
9     2012-10-01 02:03:01
10    2012-10-01 02:08:53
11    2012-10-01 02:09:04
12    2012-10-01 02:09:09
13    2012-10-01 02:10:20
14    2012-10-01 02:10:45
...

我想做类似的事情:

weekdays_only = data[data.my_dt.weekday() < 5]

AttributeError:“numpy.int64”对象没有属性“weekday”

但这不起作用,我还没有完全掌握如何访问列日期时间对象。

最终目标是按工作日时间范围分层排列,例如:

monday, 0-6, 7-12, 13-18, 19-23
tuesday, 0-6, 7-12, 13-18, 19-23
4

2 回答 2

28

您对函数“weekday”的调用不起作用,因为它对 data.my_dt 的索引进行操作,该索引是一个 int64 数组(这是错误消息的来源)

您可以使用以下内容在包含工作日的数据中创建一个新列:

data['weekday'] = data['my_dt'].apply(lambda x: x.weekday())

然后你可以过滤工作日:

weekdays_only = data[data['weekday'] < 5 ]

我希望这有帮助

于 2012-12-06T10:19:32.793 回答
10

更快的方法是使用DatetimeIndex.weekday,如下所示:

temp = pd.DatetimeIndex(data['my_dt'])
data['weekday'] = temp.weekday

快得多,尤其是对于大量行。有关更多信息,请查看答案。

于 2014-08-29T03:04:26.423 回答