habe ich nur dieses Datenrahmen einen Algorithmus für die Statistik zu testen:Numpy Schwimmer Speicher in Datenrahmen scheint falsch
d1=pd.DataFrame([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]])
Hinweis:
d1.iloc[0,1]
ergibt0.20000000000000001
d1.iloc[2,1]
Ausbeuten0.59999999999999998
Durchführung
d1=pd.DataFrame([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]]).astype(np.float)
oder
d1=pd.DataFrame([[0.1,0.2],[0.3,0.4],[0.5,0.6],[0.7,0.8],[0.9,0.81],[0.91,0.82],[0.93,0.94],[0.95,0.96],[0.97,0.98],[0.99,1]], dtype=np.float)
ändert nicht die Ergebnisse
Auf der anderen Seite, b=np.float(0.2)
und c=np.float(0.6)
richtigen Werte geben, wenn daran erinnert.
Habe ich etwas übersehen oder gibt es wirklich ein Problem mit der Datenverwaltung in Pandas? Es ist sehr wichtig für mich, da ich Präzision für meine Daten brauche.
Dank
Dies ist kein "Datenmanagement". So funktionieren [Fließkommazahlen] (https://en.wikipedia.org/wiki/Floating_point). Das Runden ist nicht ausschließlich für Zahlen oder Pandas; Alle Softwaresysteme sind dafür anfällig. Wenn Sie wirklich ein Beispiel dafür sehen wollen, sehen Sie sich einfach 'd1.iloc [0,1] - b' an. – chrisaycock
Ich wollte nicht, dass bestimmte Elemente der DF falsch waren. Alle sind. Während die gleichen Zahlen in numpy.floats nicht falsch sind. Das ist also kein Problem mit der fp-Nummer. Dies geschieht nur, wenn np.floats aus Pandas extrahiert werden. –
Beachten Sie zuerst, dass "np.float" Pythons eingebautes 'float' ist, also können wir einfach' d1.iloc [0,1] 'mit' 0.2' vergleichen. Dann beachte, dass 'd1.iloc [0,1] == 0.2' 'True' ist. Die im Speicher gespeicherten Gleitkommawerte sind genau gleich. Der Unterschied besteht darin, wie die Werte gedruckt werden. Pythons Code zum Erstellen einer Darstellung eines Gleitkommawerts als Zeichenfolge ist intelligenter als der Code von Numpy. Der Python-Code verwendet die kürzeste Zeichenfolge, die den Gleitkommawert eindeutig identifiziert. Wenn sie in einen 64-Bit-Gleitkommawert umgewandelt werden, ergeben "0,20000000000000001" und "0,2" den * gleichen * 64-Bit-Wert. –