resample - time series dataframe python
Cambiar el tipo de objeto en datetime64[ns]-pandas (2)
Aparte del enfoque de alko, este código también funcionó bien.
from dateutil import parser
def parse(x):
date, hh, mm, ss = x.split('':'')
dd, mo, yyyy = date.split(''/'')
return parser.parse("%s %s %s %s:%s:%s" % (yyyy,mo,dd,hh,mm,ss))
df[''Time''] = df[''Time''].apply(lambda x:x[1:-7])
Estoy analizando los archivos de registro del servidor web y teniendo fecha y hora en el siguiente formato.
02/Apr/2013:23:55:00 +0530
Estoy convirtiendo esto en formato de fecha y hora de pandas.
df[''Time''] = pd.to_datetime(df[''Time''])
Pero aún está en el formato de objeto.
print df.dtypes
Objeto de tiempo
¿Por qué no está cambiando a datetime64[ns]
?
Versión Numpy
In [2]: np.__version__
Out[2]: ''1.8.0''
La respuesta siguiente depende de tu versión de Python.
Pandas '' to_datetime
no puede reconocer su formato de fecha y hora personalizado, debe proporcionarlo explicitamente:
>>> import pandas as pd
>>> from datetime import datetime
>>> df = pd.DataFrame({''Time'':[''02/Apr/2013:23:55:00 +0530'']},index=[''tst''])
>>> from functools import partial
>>> to_datetime_fmt = partial(pd.to_datetime, format=''%d/%b/%Y:%H:%M:%S %z'')
y aplica este convertidor personalizado
>>> df[''Time''] = df[''Time''].apply(to_datetime_fmt)
>>> df.dtypes
Time datetime64[ns]
dtype: object
Sin embargo, tenga en cuenta que funciona desde python versión 3.2 , en versiones anteriores %z
no es compatible. Tienes que agregar timedelta manualmente.
>>> from datetime import timedelta
>>> df = pd.DataFrame({''Time'':[''02/Apr/2013:23:55:00 +0530'']},index=[''tst''])
Dividir el tiempo en datetime y offset
>>> def strptime_with_offset(string, format=''%d/%b/%Y:%H:%M:%S''):
... base_dt = datetime.strptime(string[:-6], format)
... offset = int(string[-6:])
... delta = timedelta(hours=offset/100, minutes=offset%100)
... return base_dt + delta
...
y aplique esta función de conversión:
>>> df[''Time''] = df[''Time''].apply(strptime_with_offset)
>>> df[''Time'']
tst 2013-04-03 05:25:00
Name: Time, dtype: datetime64[ns]
>>> df.dtypes
Time datetime64[ns]
dtype: object