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
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
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
efueyo
Haciendo
df.index = pd.to_datetime(df.index, errors="coerce")
el tipo de datos del índice ha cambiado a
df.index.to_datetime()
odf.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