2016-06-13 10 views
3

Ich habe ein Problem, dass, wenn ich Pandas zum Lesen Mysql-Tabelle, einige Spalten (siehe 'to_nlc') zu Integer wurde eine float-Nummer (automatisch hinzufügen .0 danach). Kann es jemand herausfinden? Oder etwas raten? Vielen Dank!Pandas lesen sql Integer wurde float

enter image description here enter image description hereenter image description here

Antwort

5

Problem ist Ihre Daten NaN Werte enthält, wird so int automatisch float gegossen.

Ich glaube, Sie NA type promotions überprüfen:

Wenn NAs in eine bestehende Serie oder Datenrahmen über reindex oder andere Mittel, boolean und Integer-Typen zu einem anderen dtype gefördert, um wird die Einführung der nationalen Agenturen zu speichern . Diese werden von dieser Tabelle zusammengefasst:

Typeclass Promotion dtype for storing NAs 
floating no change 
object  no change 
integer  cast to float64 
boolean  cast to object 

Während dies wie ein schwerer Kompromiss zu sein scheint, in der Praxis habe ich sehr wenige Fälle gefunden, wo dies ein Problem in der Praxis. Eine Erklärung für die Motivation hier im nächsten Abschnitt.

+1

Wie kann dies vermieden werden? Die ganze Zahl wird als Bezeichner verwendet, so dass das Casting zu float Präzisionsfehler verursacht –

+0

@HananShteingart - ist es möglich, 'NaN' zu' 0' zu ersetzen? wie 'df ['Spaltenname'] = df ['Spaltenname']. fillna(). astype (int)' oder 'df = df.fillna (0) .astype (int)'? – jezrael

+0

Ich bekomme es bereits als float aus dem SQL. Was ich getan habe, ist die Spalte in eine Zeichenfolge in der SQL-Abfrage zu werfen: z. CAST (bigint_column AS VARCHAR) also bekomme ich es als String im Dataframe. Es machte mir nichts aus, dass es nicht mehr numerisch ist, weil die Spalte sowieso eine ID darstellt. –