Ich bin nicht sicher, warum pd.ols
es so pingelig ist (es mir scheint, dass Sie das Beispiel korrekt befolgt). Ich vermute, dass dies auf Änderungen in der Verarbeitung von Datums- und Datumsindizes durch Pandas zurückzuführen ist, aber zu faul ist, dies weiter zu untersuchen. Wie auch immer, da Ihr Datetime-Variable nur in der Stunde unterscheidet, können Sie extrahieren nur die Stunde mit einem dt
Accessor:
pd.ols(x=pd.to_datetime(z["index"]).dt.hour, y=z[0])
jedoch, dass Sie gibt ein r-Quadrat von 1, da das Modell mit der Aufnahme überdimensioniert ist eines Schnittpunktes (und y ist eine lineare Funktion von x). Du könntest die range
zu np.random.randn
ändern und dann bekommst du etwas, das wie normale Regressionsergebnisse aussieht.
In [6]: z = pd.Series(np.random.randn(4), index = rng).reset_index()
pd.ols(x=pd.to_datetime(z["index"]).dt.hour, y=z[0])
Out[6]:
-------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <x> + <intercept>
Number of Observations: 4
Number of Degrees of Freedom: 2
R-squared: 0.7743
Adj R-squared: 0.6615
Rmse: 0.5156
F-stat (1, 2): 6.8626, p-value: 0.1200
Degrees of Freedom: model 1, resid 2
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
x -0.6040 0.2306 -2.62 0.1200 -1.0560 -0.1521
intercept 0.2915 0.4314 0.68 0.5689 -0.5540 1.1370
---------------------------------End of Summary---------------------------------
Alternativ können Sie den Index in eine ganze Zahl konvertieren, obwohl ich fand das nicht sehr gut funktioniert (ich davon aus bin, weil die ganzen Zahlen ns seit Beginn der Epoche oder ähnliches darstellen, und sind daher sehr groß und verursachen Präzisionsprobleme), sondern durch eine Billion Ganzzahl- und Dividieren Umwandlung oder tat dies Arbeit und gab im wesentlichen die gleichen Ergebnisse wie unter Verwendung dt.hour
(dh gleiche R-Quadrat):
pd.ols(x=pd.to_datetime(z["index"]).astype(int)/1e12, y=z[0])
Quelle der Fehlermeldung
FWIW, sieht es so aus, dass Fehlermeldung von so etwas wie dieses kommt:
pd.to_datetime(z["index"]).astype(float)
eine ziemlich offensichtliche Abhilfe Obwohl dies:
pd.to_datetime(z["index"]).astype(int).astype(float)
Idealerweise brauchen Sie nicht zu 'rest_index () ', funktioniert' pd.ols (y = s, x = s) 'nicht für dich? – Zero
Ja, das tut es! Vielen Dank. Weißt du zufällig, wie es funktioniert oder warum die Konvertierung von Datetime zu I davon ausgeht, dass Float fehlerfrei funktioniert? – canyon289
Nein, das scheint zu scheitern. Es macht nur eine Regression gegen die gleiche Serie – canyon289