tutorial read functions documentacion python pandas

read - Extrayendo solo mes y año de la columna Pandas Datetime(Python)



python pandas excel (8)

Tengo un Dataframe, df, con la siguiente columna:

df[''ArrivalDate''] = ... 936 2012-12-31 938 2012-12-29 965 2012-12-31 966 2012-12-31 967 2012-12-31 968 2012-12-31 969 2012-12-31 970 2012-12-29 971 2012-12-31 972 2012-12-29 973 2012-12-29 ...

Los elementos de la columna son pandas.tslib.Timestamp.

Quiero solo incluir el año y el mes. Pensé que habría una manera simple de hacerlo, pero no puedo resolverlo.

Esto es lo que he intentado:

df[''ArrivalDate''].resample(''M'', how = ''mean'')

Tuve el siguiente error:

Only valid with DatetimeIndex or PeriodIndex

Entonces probé:

df[''ArrivalDate''].apply(lambda(x):x[:-2])

Tuve el siguiente error:

''Timestamp'' object has no attribute ''__getitem__''

¿Alguna sugerencia?

Editar: de alguna manera lo descubrí.

df.index = df[''ArrivalDate'']

Entonces, puedo remuestrear otra columna usando el índice.

Pero aún me gustaría un método para reconfigurar toda la columna. ¿Algunas ideas?


Extrayendo el año dice de [''2018-03-04'']

df[''Year''] = pd.DatetimeIndex(df[''date'']).year

El df [''Año''] crea una nueva columna. Si quieres extraer el mes solo usa .month


Gracias a jaknap32 , quise agregar los resultados según el año y el mes, así que funcionó:

df_join[''YearMonth''] = df_join[''timestamp''].apply(lambda x:x.strftime(''%Y%m''))

La salida fue ordenada:

0 201108 1 201108 2 201108


Primero puede convertir sus cadenas de fecha con pandas.to_datetime , que le da acceso a todas las instalaciones numpy datetime y timedelta . Por ejemplo:

df[''ArrivalDate''] = pandas.to_datetime(df[''ArrivalDate'']) df[''Month''] = df[''ArrivalDate''].values.astype(''datetime64[M]'')


Puede acceder directamente a los atributos de year y month , o solicitar un datetime.datetime :

In [15]: t = pandas.tslib.Timestamp.now() In [16]: t Out[16]: Timestamp(''2014-08-05 14:49:39.643701'', tz=None) In [17]: t.to_datetime() Out[17]: datetime.datetime(2014, 8, 5, 14, 49, 39, 643701) In [18]: t.day Out[18]: 5 In [19]: t.month Out[19]: 8 In [20]: t.year Out[20]: 2014

Una forma de combinar el año y el mes es hacer un entero que los codifique, como por ejemplo: 201408 para agosto de 2014. A lo largo de toda una columna, podría hacer esto como 201408 :

df[''YearMonth''] = df[''ArrivalDate''].map(lambda x: 1000*x.year + x.month)

o muchas variantes de los mismos.

No soy un gran fanático de hacer esto, sin embargo, ya que hace que la alineación de fecha y la aritmética sean dolorosas más tarde y especialmente dolorosas para los demás que se encuentran con su código o datos sin esta misma convención. Una mejor manera es elegir una convención de un día del mes, como un día laborable final fuera de EE. UU., O el primer día, etc., y dejar los datos en un formato de fecha / hora con la convención de fecha elegida.

El módulo de calendar es útil para obtener el valor numérico de ciertos días, como el día de la semana final. Entonces podrías hacer algo como:

import calendar import datetime df[''AdjustedDateToEndOfMonth''] = df[''ArrivalDate''].map( lambda x: datetime.datetime( x.year, x.month, max(calendar.monthcalendar(x.year, x.month)[-1][:5]) ) )

Si está buscando una forma de resolver el problema más simple de simplemente formatear la columna de fecha y hora en alguna representación codificada, para eso puede hacer uso de la función strftime de la clase datetime.datetime , como esta:

In [5]: df Out[5]: date_time 0 2014-10-17 22:00:03 In [6]: df.date_time Out[6]: 0 2014-10-17 22:00:03 Name: date_time, dtype: datetime64[ns] In [7]: df.date_time.map(lambda x: x.strftime(''%Y-%m-%d'')) Out[7]: 0 2014-10-17 Name: date_time, dtype: object


Si desea el par único del mes, el uso de aplicar es bastante elegante.

df[''mnth_yr''] = df[''date_column''].apply(lambda x: x.strftime(''%B-%Y''))

salidas mes-año en una columna.

no te olvides de cambiar primero el formato a la fecha y hora anterior, generalmente me olvido de: |

df[''date_column''] = pd.to_datetime(df[''date_column''])


Si desea nuevas columnas que muestren año y mes por separado, puede hacer esto:

df[''year''] = pd.DatetimeIndex(df[''ArrivalDate'']).year df[''month''] = pd.DatetimeIndex(df[''ArrivalDate'']).month

o...

df[''year''] = df[''ArrivalDate''].dt.year df[''month''] = df[''ArrivalDate''].dt.month

Luego puede combinarlos o trabajar con ellos tal como están.


¡La mejor manera encontrada !

la date_column tiene que estar en formato de fecha y hora.

df[''month_year''] = df.date_column.dt.to_period(''M'')

También puede usar D para el día, 2M para 2 meses, etc. para diferentes intervalos de muestreo, y en caso de que uno tenga datos de series de tiempo con marca de tiempo, podemos ir a intervalos de muestreo granulares como 45 min durante 45 min, 15 min para 15 min de muestreo etc.


df[''year_month'']=df.datetime_column.apply(lambda x: str(x)[:7])

Esto funcionó bien para mí, no creía que los pandas interpretaran la fecha de la secuencia resultante como fecha, pero cuando hice la trama, sabía muy bien que mi agenda y la cadena year_month estaban ordenadas correctamente ... ¡tengo que amar a los pandas!