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
3
A
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.
Wie kann dies vermieden werden? Die ganze Zahl wird als Bezeichner verwendet, so dass das Casting zu float Präzisionsfehler verursacht –
@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
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. –