2016-08-10 3 views
1

Ich bin neu in Pandas und numpy und versuche, Messwerte zu einer gleich beabstandeten Zeitreihe zu aggregieren. Die Eingangsdaten werden nicht mit gleichem Abstand und wie folgt aussieht:Warum erstellen Pandas NaN für das Resampling von SQL-Daten?

timestamp   value 
2016-08-09 11:55:26 1779.510 
2016-08-09 11:55:26 1792.310 
2016-08-09 11:55:27 1796.900 
2016-08-09 11:55:28 1749.760 
2016-08-09 11:55:29 1780.870 
...     ... 

Nun, was ich versuche, die Daten aus MySQL liest und dann das Resampling zu gleichen Abständen Zeitreihen.

query = "SELECT timestamp, value FROM iren2.data WHERE data.timestamp >= now() - INTERVAL {0} DAY " \ 
      "AND data_node_id = {1} ".format(1, 307) 

data = pandas.read_sql_query(query, engine, parse_dates=True, index_col='timestamp') 
aggregation = pandas.DataFrame() 
aggregation['value'] = data.resample('1min').mean() 
print(aggregation) 

die druckt:

[104301 rows x 1 columns] 
     value 
0  NaN 
1  NaN 
...  ... 

Das ist nicht wirklich das, was ich erwartet hatte:/

Vielen Dank im Voraus!

Update EdChum Kommentar

data.info():

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 106661 entries, 2016-08-09 13:06:13 to 2016-08-10 13:06:13 
Data columns (total 1 columns): 
value 106661 non-null float64 
dtypes: float64(1) 
memory usage: 1.6 MB 

Keine

+1

Was ist der ' dtype' von Wertspalte? Kannst du die Ausgabe von 'data.info()' posten? – EdChum

+1

Was bedeutet 'data.resample ('1min') mean()' show? Das Problem hier könnte sein, dass Sie ein leeres df mit einem inkompatiblen Index zuweisen, weshalb Ihr datetimeindex nicht kopiert wird, da der Index anfänglich ein 'int64Index' ist, zum Beispiel könnten Sie' aggregation = pandas.DataFrame ({ 'Wert': data.resample ('1min'). mean()}) ' – EdChum

+0

Ja, du hast völlig Recht !! Vielen Dank! Es ist die Zuordnung zu einem leeren df. 'print (data.resample ('1min'). Mean()' funktioniert einwandfrei. – Fmeuer

Antwort

1

Das Problem hier ist, dass Sie eine neue Spalte mit Daten mit einem inkompatiblen Index hinzuzufügen sind versuchen, wenn Sie Erstellen Sie eine leere df der Indextyp wird object Dtype zunächst, Sie fügen Daten, wo der Index datetimeIndex ist, so erhalten Sie NaN für alle Zeilen.

Wenn Sie die Daten und Index im ctor des df passieren, dann wird diese Arbeit:

In [9]: 
resampled = df.resample('1min').mean() 
empty_df = pd.DataFrame({'value':resampled}, index = resampled.index) 
empty_df 

Out[9]: 
         value 
timestamp     
2016-08-09 11:55:00 1779.87 

Wenn Sie einen int Index, dann können Sie tun:

In [17]: 
resampled = df.resample('1min').mean() 
empty_df = pd.DataFrame() 
empty_df['value'] = pd.Series(resampled, index=np.arange(len(resampled.index))) 
empty_df 

Out[17]: 
    value 
0 1779.87 
Verwandte Themen