将时间戳转换为月份名称和年份作为数据框架列名称

时间:2017-11-07 18:15:31

标签: python pandas datetime datetime-format

我正在尝试将数据框架列名称(Timestamp)转换为该月份和年份的书面缩写。

以下是当前数据框的示例:

             2016-01-01  2016-02-01  2016-03-01  2016-04-01 
               00:00:00    00:00:00     00:00:00    00:00:00
Metric 1         Data          Data        Data         Data
Metric 2         Data          Data        Data         Data
Metric 3         Data          Data        Data         Data

这是我的愿望输出:

               Jan 2016    Feb 2016    March 2016   April 2016
 Metric 1         Data       Data          Data         Data
 Metric 2         Data       Data          Data         Data    
 Metric 3         Data       Data          Data         Data

以下是我用来构建数据框的代码:

start = '2016-01-01'
end = '2016-04-01'
data_dates = pd.date_range(start, end, freq='MS')
data_results = pd.DataFrame(data_dates)
data_results.columns = ['Date']

data_results = data_results['Date'].tolist()
df = pd.DataFrame(columns = data_results,  index = ['Metric 1', 'Metric 2', 'Metric 3'])

我尝试使用以下内容但没有结果。

data_results['Date'] = data_results['Date'].apply(lambda x: calendar.month_abbr[x])

2 个答案:

答案 0 :(得分:2)

假设列当前不是日期时间格式,

df.columns = pd.to_datetime(df.columns).strftime('%b %Y')

            Jan 2016    Feb 2016    Mar 2016    Apr 2016
Metric 1    NaN         NaN         NaN         NaN
Metric 2    NaN         NaN         NaN         NaN
Metric 3    NaN         NaN         NaN         NaN

编辑:我错过了用于生成df的代码,因为它们已经是日期时间,

df.columns = df.columns.strftime('%b %Y')

答案 1 :(得分:2)

假设您的列名已经是时间戳。

df.rename(columns='{:%b %Y}'.format)

         Jan 2016 Feb 2016 Mar 2016 Apr 2016
Metric 1     Data     Data     Data     Data
Metric 2     Data     Data     Data     Data
Metric 3     Data     Data     Data     Data