2017-10-04 4 views
0

Ich hatte einen Datenrahmen, der pd.Period für die Indexierung verwendet, aber später benötigt, um diese Daten für die Zeichnung der X_Achse in Bokeh verwenden.Converting PeriodIndex in

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

Leider unterstützt Bokeh Periode nicht, also bin ich fest, wie man es am besten umwandeln kann.

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

This answer didn't help, da ich immer noch werfen Art Fehler gehalten:

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' 

Irgendwelche Ideen?

EDIT: Hier ist ein Beispiel:

    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

Können Sie das Beispiel des Datenrahmens, den Sie hatten, posten. – Dark

+0

Wie hast du 'to_timestamp' genannt? – Dark

+0

'df [" calDate "]. To_timestamp()' – Tony

Antwort

2

Ich glaube, Sie in jeder Periode konvertieren müssen so zeitzustempeln verwenden Lambda dh

Beispiel:

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()) 

Ausgabe:

 
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]