2017-08-09 224 views
0

datetime的內置功能支持直接使用'<> = ...'比較兩個datetime.datetime對象。但是,我想比較兩個日期時間,僅針對小時和分鐘。pandas dataframe如何比較datetime而忽略日期

例如,如果我們有'2016-07-01 11:00:00'和'2017-07-01 09:00:00',我想說'2016-07-01 11:00 :11:00'> 9:00之後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,這是也蟒蛇3個問題?

什麼是做這種比較的好方法?謝謝!

回答

2

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

這與Python版本無關。

如果您使用熊貓> 0.16,你將需要使用dt accessor

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

如果輸入的日期是海峽和安排從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

輸入日期實際上是一個日期時間,我可以將它轉換爲str,但它相當昂貴。 – jack