2017-11-07 16 views
1

データフレームの列名(タイムスタンプ)をその月と年の書いた省略形に変換しようとしています。ここでタイムスタンプを月の名前と年をデータフレームの列の名前に変換する

は、現在のデータフレームの例である:

   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

を逃しました列名はすでにタイムスタンプです。

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 
+0

間違いなくスマート+1 – Vaishali

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') 
+0

'df.columns = df.columns.strftime( '%b%Y')'もやってください...、それらはすでに日付です。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ、ありがとう:) – Vaishali

関連する問題