2016-07-13 7 views
0

Ich lese eine CSV-Datei in den Datenrahmen eines Panda. Beim Abrufen der Daten erhalte ich geringfügig andere Werte als die Originaldaten.Wie behebt man Gleitkommadiskrepanzen in Python-Pandas-Datenrahmen?

Ich glaube, es hat etwas damit zu tun, wie Python Dezimalzahlen darstellt. Aber wie kann ich es reparieren?

CSV-Daten Beispiel:

1313331280,10.4,0.779 
1313334917,10.4,0.316 
1313334917,10.4,0.101 
1313340309,10.5,0.15 
1313340309,10.5,1.8 

Pandas Datenrahmen:

df = pd.read_csv(csv_file_full_path, names=['time','price', 'volume']) 

Der Ausgang:

ORDERS_DATA_FRAME.iloc[0]['volume'] 

source file value = 0.779 
the pandas output value = 0.77900000000000003 

Die Daten geändert wird, wenn in den Pandas Datenrahmen zu lesen. Was ist das Problem?

+1

Mögliches Duplikat von [Ist Fließkomma-Mathematik gebrochen?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – jonrsharpe

+0

Hier läuft noch etwas anderes. Zuerst mache ich keine Mathematik. Ich lese gerade Daten, die in den Datenrahmen des Pandas eingelesen wurden. Als nächstes ist es Python, nicht Javascript – Emily

+0

Nein, es ist genau das gleiche. '0.779' ** kann nicht ** exakt als Gleitkommazahl dargestellt werden, Sie sehen also * fast * diese Zahl im Datenrahmen. Sprache ist irrelevant. Siehe z.B. http://floating-point-gui.de/. Beachten Sie auch, dass der Datenrahmen nicht zu einem Panda gehört; o) – jonrsharpe

Antwort

0

Obwohl das Problem aufgrund der Gleitkommaarithmetik besteht, können Sie round(float_number, number_of_decimals) verwenden, um die normalen Werte zurückzuerhalten, wenn Sie die maximale Anzahl der Dezimalstellen Ihrer Spalte kennen. Alternativ können Sie die Spalte als Zeichenfolge lesen und sie dann in Float konvertieren, indem Sie float(float_number_string) verwenden.

Verwandte Themen