2017-10-04 152 views
0

我有一個使用pd.Period進行索引的數據幀,但後來需要使用該數據繪製Bokeh中的x_axis。將PeriodIndex轉換爲

df = return_data_with_multiindex() 
df.reset_index(inplace=True, drop=False) 
type(df["calDate"][0]) # returns pandas._period.Period 

不幸的是Bokeh不支持期間,所以我被困在如何最好地轉換它。

TypeError: Object of type 'Period' is not JSON serializable 

This answer didn't help,我還在不停地拋出類型錯誤:

AttributeError       Traceback (most recent call last) 
<ipython-input-287-8753a9594163> in <module>() 
     1 #pd.to_datetime(df["calDate"], format='%Y-%m') 
----> 2 df["calDate"].to_timestamp() 
     3 df[["calDate","freq_hist_deseas","freq_futr","freq_tr12"]] 
     4 #type(df["calDate"][0]) 

C:\ANACONDA36\lib\site-packages\pandas\core\series.py in to_timestamp(self, freq, how, copy) 
    2709    new_values = new_values.copy() 
    2710 
-> 2711   new_index = self.index.to_timestamp(freq=freq, how=how) 
    2712   return self._constructor(new_values, 
    2713         index=new_index).__finalize__(self) 

AttributeError: 'RangeIndex' object has no attribute 'to_timestamp' 

任何想法?

編輯:下面是一個例子:

    col1 col2 col3 
i1 i2 pd.Period                     
x y 2006-07 1 2 3 
        1 2 3 

EDIT2:caldate

df.reset_index(inplace=True, drop=False) 
df["calDate"].head() 

0 2006-07 
1 2006-08 
2 2006-09 
3 2006-10 
4 2006-11 
Name: calDate, dtype: object 
+0

您可以發佈您的數據框樣本。 – Dark

+0

你是怎麼稱呼'to_timestamp'的? – Dark

+0

'df [「calDate」]。to_timestamp()' – Tony

回答

2

我認爲你需要每個時段轉換爲時間戳所以使用拉姆達即

例子:

df['x'] = pd.period_range('7/1/2006', '11/1/2006', freq='M') 

type(df['x'][0]) 
#pandas._libs.period.Period 

df['x'].apply(lambda x : x.to_timestamp()) 

輸出:

 
0 2006-07-01 
1 2006-08-01 
2 2006-09-01 
3 2006-10-01 
4 2006-11-01 
Name: x, dtype: datetime64[ns]