[Python-de] Verstaendnisproblem

Stefan Schwarzer sschwarzer at sschwarzer.net
Do Feb 11 07:19:56 EST 2021


On 2021-02-11 12:35, eilfh wrote:
> bin noch Anfänger in python,
> vielleicht sieht ein Profi mit einem Blick, wo mein Fehler liegt 
> 
> Bsp.
> 
> x1 = df.loc[df.A == '7', 'Z1']
> #print(x1)   # okay, z.Bsp. 99
> x2 = 120
> x3 = 3
> x4 = df.loc[df.A == '8', 'Z1']
> #print(x4)   # okay, z.Bsp. 77
> 
> 
> d1 = x2 - x1     # okay 21
> d2 = x4 - x3     # okay 74
> 
> aber:
> d3 = d2 - d1     # --->  NaN
> oder
> d4 = (x2 - x1 + x4 - x3) # ---> NaN

Aus der Verwendung von `df.loc` schließe ich, dass es um
ein pandas DataFrame geht.

Wenn ich mit

In [28]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})                                        

In [29]: df                                                                                         
Out[29]: 
   A  B
0  1  4
1  2  5
2  3  6

In [30]: df.loc[df.A == 1, 'B']                                                                     
Out[30]: 
0    4
Name: B, dtype: int64

einen Zugriff ähnlich wie in deinem Beispiel eingebe,
bekomme ich keinen Skalar, sondern ein `pandas.Series`-
Objekt. Ich _vermute_ daher, dass du das Beispiel zu
sehr vereinfacht hast bzw. in deiner Mail etwas steht,
was sich nicht mit der tatsächlichen Abfolge der Befehle
deckt.

Dass du NaNs bekommst, obwohl an derselben Stelle
mutmaßlich andere Werte stehen sollten, weckt bei mir
den Eindruck, dass du Slices hast, die dieselben
Speicherstellen referenzieren, wie sie im ursprünglichen
DataFrame stehen und dass du das DataFrame verändert
hast und danach wieder auf deine Slices guckst, die auf
die neuen Werte im DataFrame verweisen. Diese
Assoziation deckt sich aber nicht mit deinem Beispiel.

Ich glaube, das beste ist, wenn du eine Python-Datei
mit einem minimalen Beispiel erzeugst, das bei
Ausführung der Datei die mutmaßlich falsche Ausgabe
zeigt. Wenn du die Befehle dagegen in einem Jupyter
Notebook ausführst, musst du sehr aufpassen, weil der
Zustand des Notebooks von der Folge deiner ausgeführten
Befehle abhängt, nicht von der Reihenfolge der Zellen
im Notebook.

So gesehen, also keine Lösung deines Problems, aber
vielleicht ein paar nützliche Hinweise zu dessen
Ergründung. :-) Es würde mich interessieren, ob es
weiterhilft.

Viele Grüße
Stefan


Mehr Informationen über die Mailingliste python-de