Change column names in Python Pandas from datetime objects to strings?

dataframe, pandas, pivot-table, python, time-series

Solution

You can convert the column names to strings like this:

df.columns =df.columns.map(lambda t: t.strftime('%H:%M'))

or using `rename`:

df.rename(columns =lambda t: t.strftime('%H:%M'), inplace=True)

and then index them:

df['14:00']

returns:

2015-02-20    2399.9
2015-02-21       NaN
2015-02-22       NaN
Name: 14:00, dtype: float64

Problem

Following this recipe. I 'pivoted' a dataframe that looks like this: ``` Close 2015-02-20 14:00:00 1200.1 2015-02-20 14:10:00 1199.8 2015-02-21 14:00:00 1199.3 2015-02-21 14:10:00 1199.0 2015-02-22 14:00:00 1198.4 2015-02-22 14:10:00 1199.7 ``` And turned it into this: ``` 14:00 14:10 2015-02-20 1200.1 1199.8 2015-02-21 1199.3 1199.0 2015-02-22 1198.4 1199.7 ``` However, now that I want do to simple calculations between the columns like: ``` df['Chg'] = df['14:10:00'] - df['14:00:00'] ``` I get a KeyError, because after 'pivoting' the column names are datetime.time data. ``` In [1]: df_pivot.columns.tolist() Out [2]: [datetime.time(14, 0), datetime.time(14, 10)] ``` How can I modify my pivoted dataframe, so I can do simple calculations between columns. I guess It means changing the format of the column names from datetime.time to str.

Original source