I have a pandas DataFrame containing a time series column. The years are shifted in the past, so that I have to add a constant number of years to every element of that column.The best way I found is to iterate through all the records and usex.replace(year=x.year + years)  # x = current element, years = years to addIt is cythonized as below, but still very slow (proofing)cdef list _addYearsToTimestamps(list elts, int years):    cdef cpdatetime x    cdef int i    for (i, x) in enumerate(elts):        try:            elts[i] = x.replace(year=x.year + years)        except Exception as e:            logError(None, Cannot replace year of %s - leaving value as this: %s % (str(x), repr(e)))    return eltsdef fixYear(data):    data.loc[:, 'timestamp'] = _addYearsToTimestamps(list(data.loc[:, 'timestamp']), REAL_YEAR-(list(data[-1:]['timestamp'])[0].year))    return dataI'm pretty sure that there is a way to change the year without iterating, by using Pandas's Timestamp features. Unfortunately, I don't find how. Could someone elaborate?
Pandas time series optimization problem: add year
python;pandas
Make a pandas Timedelta object then add with the += operator:x = pandas.Timedelta(days=365)mydataframe.timestampcolumn += xSo the key is to store your time series as timestamps.  To do that, use the pandas to_datetime function:mydataframe['timestampcolumn'] = pandas.to_datetime(x['epoch'], unit='s')assuming you have your timestamps as epoch seconds in the dataframe x.  That's not a requirement of course; see the to_datetime documentation for converting other formats.