pandas dataframe如何比较日期时间而忽略日期

时间:2017-08-09 08:57:48

标签: python pandas datetime dataframe

datetime的内置功能支持使用'<直接比较两个datetime.datetime对象。 > = ...“。但是,我想比较只有小时和分钟的两个日期时间。

例如,如果我们有'2016-07-01 11:00:00'和'2017-07-01 09:00:00',我想说'2016-07-01 11:00: 00'自11:00起更大> 9:00。我没有看到任何可以使用的内置功能。<​​/ p>

相反,我做了比较每一行是否

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 个答案:

答案 0 :(得分:2)

  

我使用的是python 2.7,这在python 3中也是一个问题吗?

这与Python版本无关。

如果你正在使用熊猫&gt; 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 :(得分: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])