pandas dataframe如何在忽略日期的情况下比较datetime

ds97pgxw  于 2023-04-10  发布在  其他
关注(0)|答案(3)|浏览(156)

datetime的内置功能支持直接使用'〈〉=...'比较两个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。我没有看到任何我们可以使用的内置功能。
相反,我做的事情是比较每一行是否

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的问题吗?
做这样的比较有什么好方法呢?谢谢!

wxclj1h5

wxclj1h51#

我用的是python 2.7,这也是python 3的问题吗?
这与Python版本无关。
如果你使用pandas〉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
8yparm6h

8yparm6h2#

如果输入的日期是一个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])
vkc1a9a2

vkc1a9a23#

我怀疑初学者在这里的陷阱是,如果你从时间中得到一个只有时间的字符串,那么你需要确保条件的时间在一个小时的数字前面有一个零,否则它不会进行比较。我刚刚失去了2个小时......我是绿色,非常新手。这对我很有效

df["just_time"] = df["datecolumn"].dt.strftime('%H:%M:%S')  
df["timepass"] = [1 if i >= opentime and i < closetime else 0 for i in data["just_time"]]

打开时间看起来像“09:30:00”

相关问题