2016-08-31 4 views
3

私は、マラソンランナーの開始時間と終了時間の大きなエクセルファイルを持っています。開始時間が遅れてコースに乗っているランナーの数を決定するために、私はそのデータをPandasにインポートし、特定の時間にランナーのリストを返すために組み込みのpandas比較を使用しようとしました。所与の時刻xにおいて、コース上のランナーは、開始時刻が< = x、終了時刻> xとなる。しかし、パンダではこれらのいずれかが私にエラーを与えています。Pandasのdatetime.time()での日時比較

read_exelを使用してExcelからデータフレームをインポートしました。開始時間と終了時間は自動的にDatetime.timeオブジェクトに変換されます。ここではいくつかのサンプルデータは

df = pd.DataFrame(
{'name':['Bob','Sue','Joe'], 
'start_time':[datetime.time(6,50,0),datetime.t‌​ime(6,55,0),dateti‌​me.time(7,0,0)], 
'start_time':[datetime.time(7,15,04),datetime.time(7,21,41)‌​,datetime.time(7,23,24)],}) 

ランナーは6:50でスタートだと私はすべての4分コースでランナーの量のリストを作成したいと思います。だから私はそれを処理するためにいくつかの変数を設定している:

race_start = datetime.datetime(100,1,1,6,50) 
intervaul = datetime.timedelta(minutes = 4) 
capture_time = race_start 

その後、私は、私はエラーを取得するしかし、選択に

df[df.start_time <= capture_time.time() & df.end_time > capture_time.time()] 

を建てパンダを使用して正しい行を選択しよう:

TypeError: Cannot compare datetime.time and unicode

実際、df.start_time <= capture_time.time()は問題なく動作しますが、df.end_time <= capture_time.time()がこのエラーを返します。

私はここで何が起こっているのか分かりませんし、何か助けていただければ幸いです。

答えて

2

あなたが最初に省略することができますが、ベストプラクティスによって、あまりにも使用され、二回しか()を追加必要があります。

pd[(pd.start_time <= capture_time.time()) & (pd.end_time <= capture_time.time())] 

それともdtypeend_timedatetimeではないので、あなたがto_datetime使用することができます。

pd.end_time = pandas.to_datetime(pd.end_time) 

DataFrameの名前はdfの方が良いと思います。

import pandas as pd 

df.end_time = pd.to_datetime(df.end_time) 
+0

オリジナルの投稿を編集してより明確にするつもりです。私の急いで、私は自分のデータフレームpdに名前をつけました。実際には私はdfを使っています。 しかし、私はそれが問題だとは思わない。 'type(df.end_time [0])'を実行すると、datetime.timeが返されます。また、 'df [df.end_time> capture_time.time()]というコードを実行すると、同じ元のエラーが発生するので、グループ化の問題ではないと思います。 –

+0

データのサンプルを追加できますか? 3 -4行? – jezrael

+0

'df = pd.DataFrame({'end_time':[datetime.time(10,11,10)、datetime.time(11,10,23)、datetime.time(12,12,4) ]、 'start_time':[datetime.time(10,11,7)、datetime.time(11,10,20)、datetime.time(12,12)]、}) ' – jezrael