2016-02-22 53 views
1

我有這個foll。數據幀:將多級熊貓索引轉換爲datetime

  col_a  col_b 
4 15 69.717679 0.09701 
    16 69.717679 0.09701 
    17 69.717679 0.09701 
    18 69.717679 0.09701 
    19 69.717679 0.09701 

它具有多層結構,索引與表示月的第一級(4)和表示月(1..31)的日的第二天水平。如何將多級索引轉換爲日期時間索引?年的值是2013年

我嘗試這樣做:

pd.to_datetime(df_past.index.levels[1] + df_past.index.levels[0] + 2013, format="%d%m%Y") 

,但得到的錯誤:

*** ValueError: cannot evaluate a numeric op with unequal lengths 

回答

3

要獲得指數的水平值,則需要.get_level_values()而不是.levels

pd.to_datetime(2013 * 10000 + df_past.index.get_level_values(0) * 100 + 
       df_past.index.get_level_values(1), format="%Y%m%d") 

而且,如果你添加爲整數值,則需要畝用10000/100來獲得正確的格式。另一種方法是將它們中的每一個都設爲astype(str),然後只需添加(連接)即可。

+0

感謝@joris,這是偉大的 – user308827

1

下面的列表理解/ zip方法將爲您提供日期時間對象的日期。

import datetime as dt 

new_index = [dt.datetime(2013, month, day) 
      for month, day in zip(*[df.index.get_level_values(i) for i in (0, 1)])] 
+0

我想你的意思是使用'datetime.datetime',而不是'pd.to_datetime' – joris

+0

是的,謝謝你輕鬆沒收。 – Alexander