16

週末のデータを除外し、平日のデータのみを確認したいと思います(mon(0)-fri(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」の呼び出しは、int64配列であるdata.my_dtのインデックスで動作するため機能しません(これはエラーメッセージの送信元です)

次のようなものを使用して、平日を含むデータに新しい列を作成できます。

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 に答える