Cambiar la fecha de un DateTimeIndex

Tengo un archivo csv llamado data.csv como

 TS;val 10:00;0.1 10:05;0.2 10:10;0.3 10:15;0.4 

Leí este archivo csv usando este script

 #!/usr/bin/env python import pandas as pd if __name__ == "__main__": yyyy = 2013 mm = 2 dd = 1 df = pd.read_csv('data.csv', sep=';', parse_dates=[0], index_col=0) print(df) 

entiendo esto

  val TS 2013-06-17 10:00:00 0.1 2013-06-17 10:05:00 0.2 2013-06-17 10:10:00 0.3 2013-06-17 10:15:00 0.4 

Me gustaría cambiar la fecha de cada DateTimeIndex a 2013-02-01

  val TS 2013-02-01 10:00:00 0.1 2013-02-01 10:05:00 0.2 2013-02-01 10:10:00 0.3 2013-02-01 10:15:00 0.4 

¿Cuál es la forma más fácil de hacer esto?

Las marcas de tiempo tienen un método de replace (al igual que los tiempos de datos):

 In [11]: df.index.map(lambda t: t.replace(year=2013, month=2, day=1)) Out[11]: array([Timestamp('2013-02-01 10:00:00', tz=None), Timestamp('2013-02-01 10:05:00', tz=None), Timestamp('2013-02-01 10:10:00', tz=None), Timestamp('2013-02-01 10:15:00', tz=None)], dtype=object) 

Así que establezca su índice a esto:

 In [12]: df.index = df.index.map(lambda t: t.replace(year=2013, month=2, day=1)) 

Vale la pena mencionar que puede pasar una función read_csv a read_csv , lo que podría tener más sentido para usted:

 In [21]: df = pd.read_csv(file_name, sep=';', parse_dates=[0], index_col=0, date_parser=lambda time: pd.Timestamp('2013/02/01 %s' % time)) In [22]: df Out[22]: val TS 2013-02-01 10:00:00 0.1 2013-02-01 10:05:00 0.2 2013-02-01 10:10:00 0.3 2013-02-01 10:15:00 0.4 

proporcionar un date_parser

 In [50]: pd.read_csv(StringIO(data), sep=';', parse_dates=[0], index_col=0, date_parser=lambda x: Timestamp('20130201 %s' % x)) Out[50]: val TS 2013-02-01 10:00:00 0.1 2013-02-01 10:05:00 0.2 2013-02-01 10:10:00 0.3 2013-02-01 10:15:00 0.4 

Veo dos maneras de hacer esto. El primero es el más simple: use 'string'.split(' ') . Para la cadena bb jj , devolverá una lista de 2 elementos bb y jj , así que solo obtenga el primer elemento.

La segunda opción es crear un objeto de fecha y hora a partir de la cadena y reformatearlo de la forma que desee. Esta solución es mejor en mi opinión. Si mañana quieres otro formato, esto será mucho más fácil. Para hacerlo: use la función strptime documentada aquí: http://docs.python.org/2/library/datetime.html#datetime.datetime.strptime

Luego, para devolver una cadena desde un objeto de fecha y hora, simplemente use la función strftime . Todos los diferentes formatos están disponibles aquí: http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior