mikrocontroller.net

Forum: PC-Programmierung Python Uncertainties mit DataFrames


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich versuche gerade mit de ufloat() Funktion von Python zu  arbeiten.
https://pythonhosted.org/uncertainties/

Leider schaffe ich es nicht die Funktion mit Werten aus meinem DataFrame 
zu füttern:
import uncertainties
from uncertainties import ufloat
import pandas as pd

Messwert_Fehler_relativ = 0.01
Messwert_Fehler_absolut = 1

d = {'Messwert': [11, 10,12,10,13,12]} 
df = pd.DataFrame(data=d)

df['Messwert_Fehler_gesamt']  = Messwert_Fehler_absolut + Messwert_Fehler_relativ * df['Messwert']

ufloat_Messwert               = df['Messwert']
ufloat_Messwert_Fehler_gesamt = df['Messwert_Fehler_gesamt']

df['Messwert_ufloat']         = ufloat(ufloat_Messwert,ufloat_Messwert_Fehler_gesamt)

Das ergibt eine sehr lange Fehlermeldung, hier nur ein Ausschnitt:
TypeError: cannot convert the series to <class 'float'>

During handling of the above exception, another exception occurred:

AttributeError                            Traceback (most recent call last)
<ipython-input-50-854f2c05ffa5> in <module>
      2 ufloat_Messwert_Fehler_gesamt = df['Messwert_Fehler_gesamt']
      3 
----> 4 df['Messwert_ufloat'] = ufloat(ufloat_Messwert,ufloat_Messwert_Fehler_gesamt)

Kann das jemand in seinem Notebook nachvollziehen?

Oder hat sogar jemand eine Lösung dafür?

Danke Kolja

: Bearbeitet durch User
Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kolja L. schrieb:
> df['Messwert_ufloat'] =
> ufloat(ufloat_Messwert,ufloat_Messwert_Fehler_gesamt)

ich denke das diese ufloat nicht damit klarkommt das du ein Dataframe da 
rein stopfen willst. den Dataframe kannst du dir vereinfacht als Liste 
Vorstellen und die Showcase auf deren Seite zeigen alle nur den Umgang 
mit int oder Float. auch das Zuweisen von df['Messwert_ufloat'] der 
reihe auf einen Funktionsaufruf macht wahrscheinlich wenig Sinn.

Generell sieht es mir so aus als würdest du deine DataFrames als Series 
verwenden.

Probier mal folgendes:
df['Messwert_ufloat'] = df.apply(lambda x: ufloat(x['Messwert'], x['Messwert_Fehler_gesamt']), axis=1)

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo imonbln

Danke!
Ich verstehe zwar nicht so ganz wie dein Code funktioniert, aber er 
funktioniert!

Gruß Kolja

Autor: Kolja L. (kolja82)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine kleine Frage:

Ich möchte mit den fehlerbehafteten Werten rechnen, hier nur 
beispielhaft eine Summe bilden, und das Ergebnis dann, inkl 
Fehlerbalken, plotten.

Wenn ich die df's plotte funktioniert es auch,
das Ergebnis der Berechnung geht aber nicht.

Hier mal mein Beispiel:
## geht nicht..., geht doch :-)

import uncertainties
from uncertainties import ufloat
import pandas as pd
import matplotlib.pyplot as plt

## Funktionen

def extract_errors(value):
    error = value.error_components()[value]
    return error

## Daten

Messwert_Fehler_relativ = 0.01
Messwert_Fehler_absolut = 1

d = {'Messwert': [11, 10,12,10,13,12]} 
df = pd.DataFrame(data=d)


## Berechnungen 

df['Messwert_Fehler_gesamt']  = Messwert_Fehler_absolut + Messwert_Fehler_relativ * df['Messwert']

ufloat_Messwert               = df['Messwert']
ufloat_Messwert_Fehler_gesamt = df['Messwert_Fehler_gesamt']

df['Messwert_ufloat']          = df.apply(lambda x: ufloat(x['Messwert'], x['Messwert_Fehler_gesamt']), axis=1)

Summe = df['Messwert_ufloat'].sum()

Summe_Fehler = Summe.apply(extract_errors)


 

Summe.plot(kind='bar', yerr=Summe_Fehler.values.T, alpha = 0.5,error_kw=dict(ecolor='k'))
plt.show()

Summe

Der Fehler:

------------------------------------------------------------------------ 
---
AttributeError                            Traceback (most recent call 
last)
<ipython-input-111-c3980e79ad11> in <module>
     32 Summe = df['Messwert_ufloat'].sum()
     33
---> 34 Summe_Fehler = Summe.apply(extract_errors)
     35
     36

AttributeError: 'AffineScalarFunc' object has no attribute 'apply'



Mache ich nen Denkfehler?

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kolja L. schrieb:
> Ich verstehe zwar nicht so ganz wie dein Code funktioniert, aber er
> funktioniert!

Dann solltest du die Pandas Dokumentation lesen oder ein Buch zu den 
Thema deiner Wahl, das ist keine Rocket Science.


Kolja L. schrieb:
> AttributeError: 'AffineScalarFunc' object has no attribute 'apply'

hier Hilft dir google, AffineScalarFunc ist ein Objekt deiner Komischen 
Libary (von der ich noch nie Gehört hab), seh mal nach was die sum in 
der Zeile zuvor für ein Datentyp liefert, das ist sicher nichts mit dem 
pandas umgehen kann und der grund für den Fehler.

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag

https://pythonhosted.org/uncertainties/user_guide.html zeigt im Beitrag 
Arrays of numbers with uncertainties deutlich das, bei der sum Operation 
von numpy oder pandas beim printen ein string erzeugt wird.

Der meine Vermutung untermauert das Summe vom Type AffineScalarFunc ist, 
das kannst du z.b mit type(Summe) Prüfen, und dir(Summe) dürfte dir dann 
sagen das AffineScalarFunc keine apply methode hat, damit dürfte klar 
sein das du einen Denkfehler hast.

Vielleicht hilft es wenn du uns verraten würdest was dein Ziel ist, 
willst du  für die uncertainties lib werben, dann bist du ziemlich 
ungeschickt ;) oder hast du ein Problem zu lösen, dass vielleicht diese 
Lib gar nicht braucht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.