Es geht erstmal darum, Temperaturen (Insgesamt 12 verschiedene gleichzeitig gemessene Temperaturen) die in nicht allzu regelmäßigen Abständen (ca. alle 10 Sekunden) gemessen wurden auf einen Minütigen Wert zu bekommen (Also z.B. 12:31:00 - 12:32:00 - 12:33:00 usw.). Das bekomme ich soweit auch hin, allerdings würde ich gerne diese Temperaturen in einem Bokeh plot ausgeben (Bokeh ist mehr oder weniger von meiner Professorin vorgegeben). Da komm ich allerdings grade nicht weiter. Ich denke ich weiß was das Problem ist, und zwar würde ich sagen liegt es daran, dass ich meine Zeitreihe als Index verwende und ich irgendwie diesen Index nicht als meine x-Achse verwenden darf, oder?
Ich hoffe ihr könnt mir irgendwie weiter helfen?
Die Konsole gibt mir die bereits auf eine Minute gemittelten Werte aus (gekürzt):
----------------------------------------------------
T1 T2 ... T11 T12
Date Time ...
2019-06-04 09:46:00 29.812000 27.812000 ... 15.3750 19.687000
2019-06-04 09:47:00 NaN NaN ... NaN NaN
2019-06-04 09:48:00 28.874600 27.337200 ... 15.3120 19.574800
2019-06-04 09:49:00 28.750000 27.260333 ... 15.3120 19.468500
2019-06-04 09:50:00 28.770667 27.343500 ... 15.3120 19.468500
2019-06-04 09:51:00 28.862200 27.487200 ... 15.3120 19.449600
2019-06-04 09:52:00 29.020500 27.656000 ... 15.3120 19.499833
2019-06-04 09:53:00 29.218500 27.843500 ... 15.3120 19.531000
...
2019-06-04 10:23:00 29.487200 28.187000 ... 15.3750 20.837000
2019-06-04 10:24:00 30.395667 28.749833 ... 15.3750 22.437333
2019-06-04 10:25:00 31.037400 28.924600 ... 15.3874 23.562200
2019-06-04 10:26:00 31.062333 28.676833 ... 15.4060 23.875000
2019-06-04 10:27:00 30.762200 28.237200 ... 15.4122 23.812200
[42 rows x 12 columns]
----------------------------------------------------
Allerdings bekomme ich eben dann die Fehlermeldung:
----------------------------------------------------
Traceback (most recent call last):
File "<ipython-input-197-60fb51b8684a>", line 1, in <module>
runfile('/Users/s/Desktop/Test1/Temperaturen.py', wdir='/Users/s/Desktop/Test1')
File "//anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "//anaconda3/lib/python3.7/site-packages/spyder_kernels/customize/spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/Users/s/Desktop/Test1/Temperaturen.py", line 68, in <module>
f1.circle(minute_mean_temp['Date Time'], minute_mean_temp['T2'],
File "//anaconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 2927, in __getitem__
indexer = self.columns.get_loc(key)
File "//anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2659, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1601, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1608, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Date Time'
----------------------------------------------------
Wichtig ist vor allem, dass ich Python, Pandas und Bokeh verwende.
Danke euch schonmal!
*Der Code wurde unten ein bisschen beschnitten. Eigentlich gibt es für T1 bis T12 einen eignen f1.circle Aufruf.
Code: Alles auswählen
import pandas as pd
from bokeh.plotting import figure
from bokeh.io import output_file, show
def dateparse(timestamp):
return pd.datetime.strptime(timestamp,
'%Y-%m-%d %H:%M:%S')
header=['Date Time', 'T1', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7' ,'T8', 'T9', 'T10', 'T11', 'T12']
frame=pd.read_csv('20190604_temperaturen1.txt',
names=header,
header=None,
index_col=0,
delimiter=';',
decimal='.',
parse_dates=['Date Time'],
date_parser=dateparse,
)
resample=frame.resample('Min')
minute_mean_temp=resample.mean()
print(minute_mean_temp)
output_file('Diagramm.html')
f1 = figure(plot_height=600, plot_width=1400,
title='Temperaturen',
x_axis_label='Datum/Zeit',
y_axis_label='Temperatur in °C',
x_axis_type='datetime'
)
f1.circle(minute_mean_temp['Date Time'], minute_mean_temp['T2'],
size=8,
fill_alpha=0.5,
color='red',
legend='T1'
)
f1.legend.location = "top_left"
f1.legend.click_policy="hide"
show(f1)
print(minute_mean_temp)