Supposons que j'ai un DataFrame sales
de valeurs d'horodatage:
timestamp sales_office
2014-01-01 09:01:00 Cincinnati
2014-01-01 09:11:00 San Francisco
2014-01-01 15:22:00 Chicago
2014-01-01 19:01:00 Chicago
Je voudrais créer une nouvelle colonne time_hour
. Je peux le créer en écrivant une fonction courte ainsi et en utilisant apply()
pour l'appliquer de manière itérative:
def hr_func(ts):
return ts.hour
sales['time_hour'] = sales['timestamp'].apply(hr_func)
Je verrais alors ce résultat:
timestamp sales_office time_hour
2014-01-01 09:01:00 Cincinnati 9
2014-01-01 09:11:00 San Francisco 9
2014-01-01 15:22:00 Chicago 15
2014-01-01 19:01:00 Chicago 19
Ce que je voudrais accomplir est une transformation plus courte comme celle-ci (ce qui, je le sais, est erroné mais qui va à l’esprit):
sales['time_hour'] = sales['timestamp'].hour
De toute évidence, la colonne est de type Series
et, en tant que telle, n’a pas ces attributs, mais il semble qu’il existe un moyen plus simple d’utiliser les opérations de la matrice.
Existe-t-il une approche plus directe?
En supposant que l’horodatage soit l’index de la trame de données, vous pouvez simplement faire
hours = sales.index.hour
Si vous souhaitez ajouter cela à votre base de données de vente, il suffit de faire
import pandas as pd
pd.concat([sales, pd.DataFrame(hours, index=sales.index)], axis = 1)
Edit: Si vous avez plusieurs colonnes d'objets datetime, c'est le même processus. Si vous avez une colonne ['date'] dans votre cadre de données, et en supposant que cette date comporte des valeurs datetime, vous pouvez accéder à l'heure à partir de la 'date' en tant que:
hours = sales['date'].hour
Pour la postérité: à partir de .15. , il existe un outil pratique accesseur .dt que vous pouvez utiliser pour extraire ces valeurs d’une série datetime/period (dans le cas ci-dessus, sales.timestamp.dt.hour
!
Vous pouvez utiliser un expression lambda , par exemple:
sales['time_hour'] = sales.timestamp.apply(lambda x: x.hour)
Vous pouvez essayer ceci:
sales['time_hour'] = pd.to_datetime(sales['timestamp']).dt.hour