with resample datetimeindex date_range python time pandas dataframe

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