with - libreria pandas python
¿Cómo crear un índice de fecha y hora de pandas con año como frecuencia? (4)
Usando la función pandas.date_range(startdate, periods=n, freq=f)
puede crear un rango de objetos de Timestamp
de Timestamp
de pandas donde el parámetro opcional freq
denota la frecuencia (segundo, minuto, hora, día ...) en el rango.
La documentation no menciona los literales que se espera que se transmitan, pero después de unos minutos puede encontrar fácilmente la mayoría de ellos.
- ''s'': segundo
- ''min'': minuto
- ''H'': hora
- ''D'': día
- ''w'': semana
- ''m'': mes
Sin embargo, ninguno de ''y'', ''Y'', ''yr'', etc. crea fechas con año como frecuencia. ¿Alguien sabe qué pasar, o si es posible?
Indización anual al inicio o al final del año.
La frecuencia es freq=''A''
para la frecuencia de fin de año, ''AS''
para el comienzo de año. Compruebe los alias en la documentación .
p.ej. pd.date_range(start=pd.datetime(2000, 1, 1), periods=4, freq=''A'')
devoluciones
DatetimeIndex([''2000-12-31'', ''2001-12-31'', ''2002-12-31'', ''2003-12-31''], dtype=''datetime64[ns]'', freq=''A-DEC'', tz=None)
Indización anual al inicio de un mes arbitrario.
Si necesita que sea anual desde un tiempo en particular, use un desplazamiento anclado , por ejemplo. pd.date_range(start=pd.datetime(2000, 1, 1), periods=10, freq=''AS-AUG'')
devoluciones
DatetimeIndex([''2000-08-01'', ''2001-08-01'', ''2002-08-01'', ''2003-08-01''], dtype=''datetime64[ns]'', freq=''AS-AUG'', tz=None)
Indización anual a partir de una fecha arbitraria.
Para indexar desde una fecha arbitraria, comience la serie en esa fecha y use un objeto DateOffset
personalizado.
p.ej. pd.date_range(start=pd.datetime(2000, 9, 10), periods=4, freq=pd.DateOffset(years=1))
devoluciones
DatetimeIndex([''2000-09-10'', ''2001-09-10'', ''2002-09-10'', ''2003-09-10''], dtype=''datetime64[ns]'', freq=''<DateOffset: kwds={''years'': 1}>'', tz=None)
Con todos esos hacks, hay una manera clara:
pd.date_range(start=datetime.datetime.now(),periods=5,freq=''A'')
A
: Anualmente.
365D
? De Verdad? ¿Qué pasa con los años bisiestos ?
Puedes usar el mes y luego elegir cada 12 meses:
months=pandas.date_range(start=datetime.datetime.now(),periods=120,freq=''M'')
year=[months[11*i] for i in range(12)]
También puedes hacer:
usingDays=pandas.date_range(start=datetime.datetime.now(),periods=10,freq=''365D'')
Pero eso no funcionará tan bien en años bisiestos.
Puedes usar múltiplos para las cadenas de frecuencia. Por ejemplo:
pd.date_range (''01 / 01/2010 '', periodos = 10, freq ='' 365D '')
Este código le dará una serie con 01/01/2010, 01/01/2011, etc., que creo que es lo que está buscando. Por supuesto, el problema aquí es que tendrá problemas con los años bisiestos.