2017-10-06 2 views
0

J'ai utilisé Pandas pendant un moment et je suis sûr que c'est une question stupide.Utilisation de datetime.time pour la comparaison et la création de colonnes

J'ai besoin de créer une colonne dans une trame de données qui est conditionnelle au datetime.time. Si datetime.time < 12, remplissez la colonne avec «matin», puis le même processus pour «après-midi» et «nuit».

import datetime 

b['time'] = ['01-01-2000 10:00:00', '01-01-2000 15:00:00', '01-01-2000 21:00:00'] 

b['time'].dt.time 

(output) 
1 10:00:00 
2 15:00:00 
3 21:00:00 

b['time'].dt.time < 12 #example 

TypeError: can't compare datetime.time to int 

La question est: Je ne peux pas comparer datetime.time à int. Comment puis-je réparer cela?

Très apprécié.

+0

n'est pas possible de comparer des heures? Pouvez-vous ajouter un échantillon de données et la sortie désirée? – jezrael

+0

Échantillon ajouté. La sortie désirée serait quelque chose comme une série True/False. – Vini

+0

puis utilisez 'b ['time']. Dt.hour <12' – jezrael

Répondre

0

Je pense que vous pouvez utiliser cut ou numpy.searchsorted pour les étiquettes par des bacs:

rng = pd.date_range('2017-04-03', periods=24, freq='H') 
df = pd.DataFrame({'Date': rng}) 

bins = [0, 5, 13, 17, 25] 
labels = ['Morning','Afternoon','Evening','Night'] 
hours = df['Date'].dt.hour 
df['bin'] = pd.cut(hours-5+24 *(hours<5),bins=bins,labels=labels,right=False) 

bins = [-1,4,9,17,21] 
labels = ['Night', 'Morning','Afternoon','Evening','Night'] 
df['bin1'] = np.array(labels)[np.array(bins).searchsorted(hours)-1]      
print (df) 
        Date  bin  bin1 
0 2017-04-03 00:00:00  Night  Night 
1 2017-04-03 01:00:00  Night  Night 
2 2017-04-03 02:00:00  Night  Night 
3 2017-04-03 03:00:00  Night  Night 
4 2017-04-03 04:00:00  Night  Night 
5 2017-04-03 05:00:00 Morning Morning 
6 2017-04-03 06:00:00 Morning Morning 
7 2017-04-03 07:00:00 Morning Morning 
8 2017-04-03 08:00:00 Morning Morning 
9 2017-04-03 09:00:00 Morning Morning 
10 2017-04-03 10:00:00 Afternoon Afternoon 
11 2017-04-03 11:00:00 Afternoon Afternoon 
12 2017-04-03 12:00:00 Afternoon Afternoon 
13 2017-04-03 13:00:00 Afternoon Afternoon 
14 2017-04-03 14:00:00 Afternoon Afternoon 
15 2017-04-03 15:00:00 Afternoon Afternoon 
16 2017-04-03 16:00:00 Afternoon Afternoon 
17 2017-04-03 17:00:00 Afternoon Afternoon 
18 2017-04-03 18:00:00 Evening Evening 
19 2017-04-03 19:00:00 Evening Evening 
20 2017-04-03 20:00:00 Evening Evening 
21 2017-04-03 21:00:00 Evening Evening 
22 2017-04-03 22:00:00  Night  Night 
23 2017-04-03 23:00:00  Night  Night