在特定日期值上对pandas数据帧进行子集化

时间:2016-02-01 12:49:52

标签: python date pandas

我有像这样的pandas数据框

order_id buyer_id item_id                time        
537       79      93 2016-01-04 10:20:00    
540      191      93 2016-01-04 10:30:00    
556      251      82 2016-01-04 13:39:00  
589      191     104 2016-01-05 10:59:00   
596      251      99 2016-01-05 13:48:00    
609       79     106 2016-01-06 10:39:00    
611      261      97 2016-01-06 10:50:00   
680       64     135 2016-01-11 11:58:00  
681      261     133 2016-01-11 12:03:00    
682      309     135 2016-01-11 12:08:00 

我想在date == '2016-01-04上对此数据框进行子集化。df数据框的数据类型为

df.dtypes Out[1264]: order_id object buyer_id object item_id object time datetime64[ns]

这就是我在python中所做的事情

df[df['time'] == '2016-01-04']

但它返回一个空的数据帧。但是,当我这样做的时候 df[df['time'] < '2016-01-05']它有效。请帮忙

2 个答案:

答案 0 :(得分:1)

IIUC你可以使用DatetimeIndex Partial String Indexing

print df
   order_id  buyer_id  item_id                time
0       537        79       93 2016-01-04 10:20:00
1       540       191       93 2016-01-04 10:30:00
2       556       251       82 2016-01-04 13:39:00
3       589       191      104 2016-01-05 10:59:00
4       596       251       99 2016-01-05 13:48:00
5       609        79      106 2016-01-06 10:39:00
6       611       261       97 2016-01-06 10:50:00
7       680        64      135 2016-01-11 11:58:00
8       681       261      133 2016-01-11 12:03:00
9       682       309      135 2016-01-11 12:08:00

df = df.set_index('time')
print df['2016-01-04']
                     order_id  buyer_id  item_id
time                                            
2016-01-04 10:20:00       537        79       93
2016-01-04 10:30:00       540       191       93
2016-01-04 13:39:00       556       251       82

答案 1 :(得分:1)

这里的问题是正在执行完全匹配的比较,因为没有时间是'00:00:00'然后没有匹配发生,你必须只比较日期组件才能使它工作:

In [20]:
df[df['time'].dt.date == pd.to_datetime('2016-01-04').date()]

Out[20]:
   order_id  buyer_id  item_id                time
0       537        79       93 2016-01-04 10:20:00
1       540       191       93 2016-01-04 10:30:00
2       556       251       82 2016-01-04 13:39:00