Convertir índice de marco de datos a fecha y hora

2 minutos de lectura

Avatar de usuario de Runner Bean
Frijol corredor

¿Cómo convierto un índice de pandas de cadenas al formato de fecha y hora?

mi marco de datos df es así:

                     value          
2015-09-25 00:46    71.925000
2015-09-25 00:47    71.625000
2015-09-25 00:48    71.333333
2015-09-25 00:49    64.571429
2015-09-25 00:50    72.285714

pero el índice es de tipo cadena, pero lo necesito en formato de fecha y hora porque me sale el error:

'Index' object has no attribute 'hour'

cuando usas

df["A"] = df.index.hour

  • df.index.to_datetime() o df.index = pandas.to_datetime(df.index) (el primero ahora está obsoleto).

    – Un campeón

    26 de noviembre de 2016 a las 5:26


  • tipo(df.índice[1]) todavía devuelve ‘str’

    – Frijol Corredor

    26 de noviembre de 2016 a las 5:29

  • Los datos anteriores se convierten en datetime sin problemas – type(df.index[1]) == pandas.tslib.Timestamp. ¿Tiene datos incorrectos en el resto del marco de datos?

    – Un campeón

    26 de noviembre de 2016 a las 5:36

  • También puede especificar el formato y un kwag de errores. Documentación de pandas.to_datetime explicará el resto.

    – Kartik

    26 de noviembre de 2016 a las 5:41

Debería funcionar como se esperaba. Intente ejecutar el siguiente ejemplo.

import pandas as pd
import io

data = """value          
"2015-09-25 00:46"    71.925000
"2015-09-25 00:47"    71.625000
"2015-09-25 00:48"    71.333333
"2015-09-25 00:49"    64.571429
"2015-09-25 00:50"    72.285714"""

df = pd.read_table(io.StringIO(data), delim_whitespace=True)

# Converting the index as date
df.index = pd.to_datetime(df.index)

# Extracting hour & minute
df['A'] = df.index.hour
df['B'] = df.index.minute
df

#                          value  A   B
# 2015-09-25 00:46:00  71.925000  0  46
# 2015-09-25 00:47:00  71.625000  0  47
# 2015-09-25 00:48:00  71.333333  0  48
# 2015-09-25 00:49:00  64.571429  0  49
# 2015-09-25 00:50:00  72.285714  0  50

Tú podrías crear explícitamente a DatetimeIndex al inicializar el marco de datos. Suponiendo que sus datos están en formato de cadena

data = [
    ('2015-09-25 00:46', '71.925000'),
    ('2015-09-25 00:47', '71.625000'),
    ('2015-09-25 00:48', '71.333333'),
    ('2015-09-25 00:49', '64.571429'),
    ('2015-09-25 00:50', '72.285714'),
]

index, values = zip(*data)

frame = pd.DataFrame({
    'values': values
}, index=pd.DatetimeIndex(index))

print(frame.index.minute)

  • FYI para Python3, necesitas index, values = zip(*data.items())

    -Addison Klinke

    29 de agosto de 2020 a las 22:55


Avatar de usuario de Muhammad Ammar Fauzan
Mohamed Ammar Fauzan

Solo doy otra opción para esta pregunta: debe usar ‘.dt’ en su código:

import pandas as pd

df.index = pd.to_datetime(df.index)

#for get year
df.index.dt.year

#for get month
df.index.dt.month

#for get day
df.index.dt.day

#for get hour
df.index.dt.hour

#for get minute
df.index.dt.minute

avatar de usuario de efueyo
efueyo

Haciendo

df.index = pd.to_datetime(df.index, errors="coerce")

el tipo de datos del índice ha cambiado a

información del marco de datos

¿Ha sido útil esta solución?