Seite 1 von 2
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 19:10
von Mogician
Ja, richtig, dieses Symbol für den Durchschnitt hat das verursacht. Und stimmt, die Zeile kann ich ganz löschen.
Jetzt kommt aber das hier.
Code: Alles auswählen
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-13-ee95a1149030> in <module>
3
4 df = pd.read_csv("daten.csv")
----> 5 df[["TI101"]].plot(figsize=(40,10))
~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
2680 if isinstance(key, (Series, np.ndarray, Index, list)):
2681 # either boolean or fancy integer index
-> 2682 return self._getitem_array(key)
2683 elif isinstance(key, DataFrame):
2684 return self._getitem_frame(key)
~\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_array(self, key)
2724 return self._take(indexer, axis=0)
2725 else:
-> 2726 indexer = self.loc._convert_to_indexer(key, axis=1)
2727 return self._take(indexer, axis=1)
2728
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
1325 if mask.any():
1326 raise KeyError('{mask} not in index'
-> 1327 .format(mask=objarr[mask]))
1328
1329 return com._values_from_object(indexer)
KeyError: "['TI101'] not in index"
Mit "Value" das gleiche. Da hab ich wohl irgendwie den Zusammenhang nicht geschnallt.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 19:30
von ThomasL
Er findet keine Spalte mit Namen 'TI101'
Du kannst mit df.head() dir die ersten 5 Zeilen anzeigen lassen, da werden auch die Spaltennamen aufgeführt, kopier das mal hier rein
Falls du die Möglichkeit hast, mir eine Sample csv Datei (zB nur 50 Zeilen oder so) zur Verfügung zu stellen, kann ich dir ein Notebook mit Beispielschritten basteln, wie ich vorgehen würde.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 19:32
von Mogician
Ich werde das dann mal jetzt probieren.
edit:
Natürlich gerne. Soll ich das irgendwo hochladen und dir den Link schicken oder geht das auch irgendwo hier, oder direkt?
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 19:47
von Sirius3
Wenn Du Tabs als Trennzeichen hast, solltest Du die beim Lesen auch angeben:
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 19:52
von Mogician
Danke, aber ich bekomme im Ergebnis erstmal den gleichen Error.
Code: Alles auswählen
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("daten.csv", delimiter="\t")
df[["ti101"]].plot(figsize=(40,10))
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-17-8e7b8287bf5a> in <module>
3
4 df = pd.read_csv("daten.csv", delimiter="\t")
----> 5 df[["ti101"]].plot(figsize=(40,10))
~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
2680 if isinstance(key, (Series, np.ndarray, Index, list)):
2681 # either boolean or fancy integer index
-> 2682 return self._getitem_array(key)
2683 elif isinstance(key, DataFrame):
2684 return self._getitem_frame(key)
~\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_array(self, key)
2724 return self._take(indexer, axis=0)
2725 else:
-> 2726 indexer = self.loc._convert_to_indexer(key, axis=1)
2727 return self._take(indexer, axis=1)
2728
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
1325 if mask.any():
1326 raise KeyError('{mask} not in index'
-> 1327 .format(mask=objarr[mask]))
1328
1329 return com._values_from_object(indexer)
KeyError: "['ti101'] not in index"
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 19:59
von ThomasL
Schick mir einen Link bei einem Hoster deiner Wahl per PN.
Schreiben sich die Spalten mit kleinem ti101 oder grossem TI101, das ist Case Sensitiv.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 20:18
von Mogician
Oh okay, dann gibt es mit dem neuen code schon einen Unterschied.
Code: Alles auswählen
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("daten.csv", delimiter="\t")
df[["TI101"]].plot(figsize=(40,10))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-9a464363557d> in <module>
3
4 df = pd.read_csv("daten.csv", delimiter="\t")
----> 5 df[["TI101"]].plot(figsize=(40,10))
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in __call__(self, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
2939 fontsize=fontsize, colormap=colormap, table=table,
2940 yerr=yerr, xerr=xerr, secondary_y=secondary_y,
-> 2941 sort_columns=sort_columns, **kwds)
2942 __call__.__doc__ = plot_frame.__doc__
2943
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in plot_frame(data, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
1975 yerr=yerr, xerr=xerr,
1976 secondary_y=secondary_y, sort_columns=sort_columns,
-> 1977 **kwds)
1978
1979
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _plot(data, x, y, subplots, ax, kind, **kwds)
1802 plot_obj = klass(data, subplots=subplots, ax=ax, kind=kind, **kwds)
1803
-> 1804 plot_obj.generate()
1805 plot_obj.draw()
1806 return plot_obj.result
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in generate(self)
256 def generate(self):
257 self._args_adjust()
--> 258 self._compute_plot_data()
259 self._setup_subplots()
260 self._make_plot()
~\Anaconda3\lib\site-packages\pandas\plotting\_core.py in _compute_plot_data(self)
371 if is_empty:
372 raise TypeError('Empty {0!r}: no numeric data to '
--> 373 'plot'.format(numeric_data.__class__.__name__))
374
375 self.data = numeric_data
TypeError: Empty 'DataFrame': no numeric data to plot
Neuer Error.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 20:21
von pixewakb
Da stimmt etwas mit deinen Daten nicht: In Excel werden schon einige Zahlen nicht als Zahlen erkannt und deshalb linksbündig ausgerichtet. Ferner ist mir nicht klar, was Komma ist, weil sonst Zahlen für Temperaturen zu groß wären... Möglicherweise musst du noch mal auf die Ursprungsdaten zurückgehen.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 20:39
von Mogician
pixewakb hat geschrieben: ↑Sonntag 4. November 2018, 20:21
Da stimmt etwas mit deinen Daten nicht: In Excel werden schon einige Zahlen nicht als Zahlen erkannt und deshalb linksbündig ausgerichtet. Ferner ist mir nicht klar, was Komma ist, weil sonst Zahlen für Temperaturen zu groß wären... Möglicherweise musst du noch mal auf die Ursprungsdaten zurückgehen.
Stimmt, das ist merkwürdig. Bei der Auswertung mit Excel ging das noch, ich schaue es mir gerade an.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 20:42
von ThomasL
Dateien sind angekommen, schau sie mir gerade an. Gib mir ein wenig Zeit und ich sende dir ein Notebook zurück.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 20:50
von ThomasL
Wie sind denn die Zahlenwerte der Spalten TIxxx zu interpretieren?
Code: Alles auswählen
Date Time TI101 TI102 TI103 TI104 TI105 TI106 TI107 TI108 ... TI148 TI149 TI150 TI151 TI152 TI153 TI154 TI155 TI156 TI157
0 02.11.2018 12:28:57 83.829.002 83.908.996 80.165.001 80.096.001 84.275.002 84.022.003 88.922.996 88.781.998 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
1 02.11.2018 12:28:58 83.626.999 83.765.999 79.987 79.905.998 84.067.001 83.832.001 88.745.003 88.616.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
2 02.11.2018 12:29:01 83.115.997 83.244.003 79.392.998 79.300.003 83.443.001 83.252.998 88.156.998 88.037.002 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
3 02.11.2018 12:29:03 82.938.004 82.899.002 78.988.998 78.931.999 83.083 82.825.996 87.758.003 87.653 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
4 02.11.2018 12:29:05 82.628.998 82.566.002 78.621.002 78.528 82.655.998 82.418.999 87.412.002 87.282.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 20:59
von Mogician
Hab die Urdatei nochmal mit notepad bearbeitet und dann nochmal ausprobiert mit dem Ergebnis.
Code: Alles auswählen
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("Kopie_Daten.csv", delimiter="\t")
df[["TI101"]].plot(figsize=(40,10))
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-25-7047e00903df> in <module>
3
4 df = pd.read_csv("Kopie_Daten.csv", delimiter="\t")
----> 5 df[["TI101"]].plot(figsize=(40,10))
~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
2680 if isinstance(key, (Series, np.ndarray, Index, list)):
2681 # either boolean or fancy integer index
-> 2682 return self._getitem_array(key)
2683 elif isinstance(key, DataFrame):
2684 return self._getitem_frame(key)
~\Anaconda3\lib\site-packages\pandas\core\frame.py in _getitem_array(self, key)
2724 return self._take(indexer, axis=0)
2725 else:
-> 2726 indexer = self.loc._convert_to_indexer(key, axis=1)
2727 return self._take(indexer, axis=1)
2728
~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _convert_to_indexer(self, obj, axis, is_setter)
1325 if mask.any():
1326 raise KeyError('{mask} not in index'
-> 1327 .format(mask=objarr[mask]))
1328
1329 return com._values_from_object(indexer)
KeyError: "['TI101'] not in index"
df.head()
Date;Time;TI101;TI102;TI103;TI104;TI105;TI106;TI107;TI108;TI109;TI110;TI111;TI112;TI113;TI114;TI115;TI116;TI117;TI118;TI119;TI120;TI121;TI122;TI123;TI124;TI125;TI126;TI127;TI128;TI129;TI130;TI131;TI132;TI133;TI134;TI135;TI136;TI137;TI138;TI139;TI140;TI141;TI142;TI143;TI144;TI145;TI146;TI147
0 02.11.2018;11:45:18;50,20;36,12;45,20;45,78;40...
1 02.11.2018;11:45:20;50,76;37,00;46,39;46,96;41...
2 02.11.2018;11:45:22;51,95;37,95;47,54;48,02;42...
3 02.11.2018;11:45:24;53,02;38,89;48,59;49,15;43...
4
Also wieder der alte Error
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 21:01
von Mogician
ThomasL hat geschrieben: ↑Sonntag 4. November 2018, 20:50
Wie sind denn die Zahlenwerte der Spalten TIxxx zu interpretieren?
Code: Alles auswählen
Date Time TI101 TI102 TI103 TI104 TI105 TI106 TI107 TI108 ... TI148 TI149 TI150 TI151 TI152 TI153 TI154 TI155 TI156 TI157
0 02.11.2018 12:28:57 83.829.002 83.908.996 80.165.001 80.096.001 84.275.002 84.022.003 88.922.996 88.781.998 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
1 02.11.2018 12:28:58 83.626.999 83.765.999 79.987 79.905.998 84.067.001 83.832.001 88.745.003 88.616.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
2 02.11.2018 12:29:01 83.115.997 83.244.003 79.392.998 79.300.003 83.443.001 83.252.998 88.156.998 88.037.002 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
3 02.11.2018 12:29:03 82.938.004 82.899.002 78.988.998 78.931.999 83.083 82.825.996 87.758.003 87.653 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
4 02.11.2018 12:29:05 82.628.998 82.566.002 78.621.002 78.528 82.655.998 82.418.999 87.412.002 87.282.997 ... 1372 1372 1372 1372 1372 1372 1372 1372 1372 1372
Sorry, da hat Excel was zerhackt. Es sind im Prinzip Temperaturen, also 83,83 würde voll reichen. Ich weiß nicht, warum Excel da zwei Punkte reingehauen hat.
An dem Computer, wo die Daten herkommen, ist wohl nach amerikanischer norm eingestellt udn deshalb Punkt statt Komma.
Ich habe das jetzt mal mit notepad geöffnet, ersetzt und dann mit Excel geöffnet und zur csv gemacht.
Ich schicke dir nochmal Daten okay?
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 21:06
von Sirius3
Was sollen denn diese doppelten eckigen Klammern?
Was passiert bei:
?
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 21:09
von pixewakb
Sirius3 hat geschrieben: ↑Sonntag 4. November 2018, 21:06
Was sollen denn diese doppelten eckigen Klammern?
Was passiert bei:
?
@Sirius3: <s>Danke für den Hinweis, wahrscheinlich ein Fragment, was ich von irgendwo mitschleppe.</s> Ich plotte meist mehrere Spalten in einem Durchgang und dann brauche ich die doppelten eckigen Klammern. Das ist der Grund dafür. Im obigen Beispiel kommst du ohne aus; wenn der Threadstarter mal mehrere Spalten plotten will, braucht er das wieder.
@Mogician: Pandas braucht wahrscheinlich amerikanisches Format, Rest käme auf einen Test an, ob ein Komma auch erkannt würde.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Sonntag 4. November 2018, 21:39
von Mogician
Also ich bekomme immer einen der beiden Error, egal ob ich Komma oder Punkt mache.
Hab eben mal alle anderen TI-Zeilen gelöscht, und die TI101 mit Punkt und Komma ausprobiert, error war immer "TypeError: Empty 'DataFrame': no numeric data to plot".
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Montag 5. November 2018, 10:02
von Mogician
Hat vielleicht noch einer eine Lösung oder ein Beispiel mit einer einfachen Datei, wo es funktioniert?
Danke
edit: Frage nach einem Beispiel besteht jetzt nicht mehr unbedingt, da ThomasL (Danke dafür) das schon macht. Wenn jemand trotzdem einen Einfall hat wäre das natürlich immer noch interessant. Danke an alle!
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Montag 5. November 2018, 17:32
von nezzcarth
Mogician hat geschrieben: ↑Sonntag 4. November 2018, 19:32
Natürlich gerne. Soll ich das irgendwo hochladen und dir den Link schicken oder geht das auch irgendwo hier, oder direkt?
Falls möglich, stell den Link zur Originaldatei doch gerne hier rein, da ist die Schwelle dir zu helfen für alle niedriger.
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Montag 5. November 2018, 18:25
von ThomasL
Mogician, du hast das Notebook in deinem Postfach
Code: Alles auswählen
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_table('Daten_02112018114518.txt', skiprows=[0,1,2,3,4,5,6,7,8,9,10,11,13], index_col=False)
df.info()
df.head(2)
# zusammenfügen der Spalten DATE und TIME zu einer vom Typ DATETIME
newdate = df['Date'] + ' ' + df['Time']
newdate = pd.to_datetime(newdate, errors='raise')
newdate = pd.DataFrame(newdate, columns=['date_time'])
df = pd.concat([newdate, df], axis=1)
# die DATETIME Spalte als Index definieren
df.set_index('date_time', inplace=True)
df.head(2)
df['TI101'].plot(kind='line', figsize=(10,5), color=['black'], ylim=[40, 140], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
plt.title('TI101')
plt.ylabel('Messwert')
plt.xlabel('Zeitpunkt')
plt.show()
TI101_102 = df[['TI101', 'TI102']]
diff = pd.DataFrame(df.TI101 - df.TI102, columns=['Difference'])
TI101_102 = pd.concat([TI101_102, diff], axis=1)
TI101_102.plot(kind='line', color=['blue', 'green', 'red'], figsize=(18,5), rot=90, xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22'])
plt.title('TI101 und TI102, sowie Differenz der beiden')
plt.ylabel('Messwert')
plt.xlabel('Zeitpunkt')
plt.legend(labels=TI101_102.columns, loc='best')
plt.show()
fig = plt.figure() # create figure
ax0 = fig.add_subplot(1, 2, 1) # add subplot 1 (1 row, 2 columns, first plot)
ax1 = fig.add_subplot(1, 2, 2) # add subplot 2 (1 row, 2 columns, second plot). See tip below**
# Subplot 1:
df[['TI101', 'TI102']].plot(kind='line', figsize=(18,5), ax=ax0, color=['blue', 'green'], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22']) # add to subplot 1
ax0.set_title('T1101 und TI102')
ax0.set_ylabel('Messwerte')
ax0.set_xlabel('Zeitpunkte')
# Subplot 2:
diff = pd.DataFrame(df.TI101 - df.TI102, columns=['Differenz'])
diff.plot(kind='line', figsize=(18, 5), ax=ax1, ylim=[-5,17], xlim=['2018-02-11 11:44:50', '2018-02-11 12:25:22']) # add to subplot 2
ax1.set_title ('Differenz')
ax1.set_ylabel('Messwerte')
ax1.set_xlabel('Zeitpunkte')
ax1.annotate('Was ist das für eine Spitze?', xy=('2018-02-11 12:01:00', -3))
plt.show()
Re: Messdaten (100.000+) auswerten, Diagramme erzeugen
Verfasst: Donnerstag 8. November 2018, 18:11
von Mogician
Super, der code hilft mir schon massiv weiter. Eine Frage hätte ich jetzt noch.
Wie greife ich einen bestimmten Wertebereich raus auf der x-Achse, also zb wenn die Messung von 12h bis 15h lief, und man nur von 13h-14h plotten möchte?
Für die y-Achse hab ich das geschafft, aber wegen dem Zeitformat noch nicht auf der x-Achse.
Also ich habe probiert den code von ThomasL anzuwenden
und auch
und den letzten dann auch mit diversen xmin und xmax Werten aber im Ergebnis kriege ich immer was ganz anderes auf der x-Achse
Danke