2017-08-09 9 views
0

datetimeの組み込み関数は、 '<> = ...'を直接使用する2つのdatetime.datetimeオブジェクトを直接比較することをサポートしています。しかし、私は2つのdatetimeを時間と分だけに関して比較したいと思います。pandas dataframe日付を無視してdatetimeを比較する方法

たとえば、「2016-07-01 11:00:00」と「2017-07-01 09:00:00」がある場合、「2016-07-01 11:00 :00 'は11:00> 9:00より大きい。私は、私たちが使用できる組み込みの機能は見ていませんでした。

は、その代わりに、私は

data = data[time_start.hour * 60 + time_start.minute 
      < (data['time'].hour * 60 + data['time'].minute) 
      < time_end.hour * 60 + time_end.minute ] 

かどうかをそれぞれの行を比較するようなことをやったが、エラーがあります:

AttributeError: 'Series' object has no attribute 'hour' 

私のpython 2.7を使用しています、これはまたのpython 3で問題ありますか?

このような比較を行うにはどうすればよいでしょうか?ありがとう!

答えて

2

I am using python 2.7, is this also a problem in python 3?

これはPythonバージョンとは関係ありません。

あなたがdt accessor使用する必要がありますパンダ> 0.16を使用している場合:たとえば

data['time'].dt.hourdata['time'].dt.minute

を:

import pandas as pd 
import datetime as dt 

df = pd.DataFrame({'a': [dt.datetime(2016, 7, 1, 11), dt.datetime(2017, 7, 7, 9)]}) 
df['b'] = df['a'].dt.hour 

print(df) 

#      a b 
# 0 2016-07-01 11:00:00 11 
# 1 2017-07-07 09:00:00 9 

df = df[df['a'].dt.hour > 10] 

print(df) 

#      a b 
# 0 2016-07-01 11:00:00 11 
1

入力日付がSTRで、配置されている場合yyyy-mm-dd hh:mm:ssから、これを単に文字列として比較しないでください。

import pandas as pd 
dates = [ '2016-07-01 11:00:00','2016-07-01 13:00:00','2016-07-01 15:00:00'] 
df = pd.DataFrame(dates,columns=['dates']) 

a = (df['dates'].str[-8:] > '09:00:00') & (df['dates'].str[-8:] <= '11:00:00') 

print(df [a]) 
+0

これは私が推測する良い解決策です。ありがとう! – jack

+0

入力日付は実際にdatetimeですが、strに変換できますが、かなり高価です。 – jack

関連する問題