web-dev-qa-db-fra.com

Pandas: sélection de lignes DataFrame entre deux dates (index Datetime)

J'ai un Pandas DataFrame avec un DatetimeIndex et une colonne MSE Loss l'index est formaté comme suit:

DatetimeIndex(['2015-07-16 07:14:41', '2015-07-16 07:14:48',
           '2015-07-16 07:14:54', '2015-07-16 07:15:01',
           '2015-07-16 07:15:07', '2015-07-16 07:15:14',...]

Cela comprend plusieurs jours.

Je veux sélectionner toutes les lignes (toutes les heures) d'un jour particulier sans connaître spécifiquement les intervalles de temps réels. Par exemple: Entre 2015-07-16 07:00:00 et 2015-07-16 23:00:00

J'ai essayé l'approche décrite ici: ici

Mais df[date_from:date_to]

les sorties:

KeyError: Timestamp('2015-07-16 07:00:00')

Il veut donc des indices exacts. De plus, je n'ai pas de colonne date. Seul un index avec les dates.

Quelle est la meilleure façon de sélectionner une journée entière en fournissant simplement une date 2015-07-16 et comment puis-je sélectionner une plage horaire spécifique au cours d'une journée particulière?

12
user3142067

Option 1:

Exemple df:

df
                      a
2015-07-16 07:14:41  12
2015-07-16 07:14:48  34
2015-07-16 07:14:54  65
2015-07-16 07:15:01  34
2015-07-16 07:15:07  23
2015-07-16 07:15:14   1

On dirait que vous essayez ceci sans .loc (ne fonctionnera pas sans):

df.loc['2015-07-16 07:00:00':'2015-07-16 23:00:00']
                      a
2015-07-16 07:14:41  12
2015-07-16 07:14:48  34
2015-07-16 07:14:54  65
2015-07-16 07:15:01  34
2015-07-16 07:15:07  23
2015-07-16 07:15:14   1

Option 2:

Vous pouvez utiliser l'indexation booléenne sur l'index:

df[(df.index.get_level_values(0) >= '2015-07-16 07:00:00') & (df.index.get_level_values(0) <= '2015-07-16 23:00:00')]
9
Andrew L

Vous pouvez utiliser truncate:

begin = pd.Timestamp('2015-07-16 07:00:00')
end = pd.Timestamp('2015-07-16 23:00:00')

df.truncate(before=begin, after=end)
5
JrtPec