2017-04-21 2 views
2

Ich habe einen Datenrahmen aller 505 Lager von der SP500. Ich möchte die wöchentlichen Werte für jeden Sonntag mit der asfreq-Funktion erhalten. Nehmen wir an, ich verwende es nur für zwei Spalten von AAPL und MSFT Aktien für nur 20 Handelstage.asfreq Funktion für Datenrahmen funktioniert nicht Python

    AAPL  MSFT 
     Date  
2012-04-05 82.099293 27.453578 
2012-04-09 82.429673 27.087763 
2012-04-10 81.420407 26.539039 
2012-04-11 81.130193 26.434521 
2012-04-12 80.685799 26.983243 
2012-04-13 78.413325 26.835175 
2012-04-16 75.161385 27.070343 
2012-04-17 78.992457 27.383899 
2012-04-18 78.816259 27.122601 
2012-04-19 76.108461 27.009374 
2012-04-20 74.235032 28.237466 
2012-04-23 74.069192 27.976170 
2012-04-24 72.589626 27.801974 
2012-04-25 79.031329 28.045851 
2012-04-26 78.733339 27.967462 
2012-04-27 78.124412 27.854232 
2012-04-30 75.660185 27.889073 
2012-05-01 75.420503 27.880361 
2012-05-02 75.919303 27.697454 
2012-05-03 75.380337 27.662615 

Ich versuche auf dem Dataframe die asfreq-Funktion.

df2 = df.asfreq("W-SUN", method="pad") 

Es generiert die großen Fehler, der an der Unterseite sagt:

TypeError: Cannot compare type 'Timestamp' with type 'str' 

ich auch versucht method = "ffill", gleichen Fehler. Die asfreq ("W-SUN") gab mir nur NaN-Werte, und asfreq ("W-MON", method = "pad") gab mir auch den gleichen Fehler "W-SUN".

Ich habe die asfreq-Funktion zuvor verwendet, und es hat perfekt funktioniert, aber jetzt tut es nicht. Was gibt? Jede Hilfe würde sehr geschätzt werden.

+0

'asfreq' arbeitet mit' DatetimeIndex' was ist der Dtype Ihres Indexes? probiere 'df.index = pd.to_datetime (df.index) 'vor dem' asfreq' Aufruf – EdChum

+0

Hey EdChum, danke antworten, es hat funktioniert! Sehr nett. Ich war verblüfft, wie es vorher mit genau dem gleichen Datenrahmen funktionierte, dem SP500-Index, den ich viele Male benutzt habe. – MichaelRSF

Antwort

1

asfreq Arbeiten mit DatetimeIndex, der Fehler ist Ihnen zu sagen, dass es immer noch str so müssen Sie die dtype mit to_datetime konvertieren:

df.index = pd.to_datetime(df.index) 

dann sollte der Anruf zu asfreq wie erwartet funktionieren

Verwandte Themen