Pandas read_csv ignorieren Spalte dtypes wenn ich den pass skip_footer arg

Wenn ich versuche zu importieren einer csv-Datei in ein pandas dataframe (0.13.1) ist die Nichtbeachtung der dtype-parameter. Gibt es eine Möglichkeit zu stoppen pandas aus der Herleitung der Datentyp, auf seine eigene?

Ich bin die Zusammenlegung mehrerer CSV-Dateien, und manchmal sind die Kunden enthält Briefe und pandas Importe als string. Wenn ich versuche die Zusammenführung der beiden dataframes bekomme ich eine Fehlermeldung, weil ich versuche, Zusammenführen von zwei verschiedenen Arten. Ich brauche alles, was als Zeichenfolgen gespeichert werden.

Daten snippet:

|WAREHOUSE|ERROR|CUSTOMER|ORDER NO|
|--------- | ----- | -------- | --------|
|3615     |     |03106   |253734  |
|3615     |     |03156   |290550  |
|3615     |     |03175   |262207  |
|3615     |     |03175   |262207  |
|3615     |     |03175   |262207  |
|3615     |     |03175   |262207  |
|3615     |     |03175   |262207  |
|3615     |     |03175   |262207  |
|3615     |     |03175   |262207  |

Import-Zeile:

df = pd.read_csv("SomeFile.csv", 
                 header=1,
                 skip_footer=1, 
                 usecols=[2, 3], 
                 dtype={'ORDER NO': str, 'CUSTOMER': str})

df.dtypes Ausgänge dieser:

ORDER NO    int64
CUSTOMER    int64
dtype: object
  • Ich bin mit dtype wie bereits in der Antwort gibt. Es löst das problem nicht.
  • 0.13.1 war nicht wortreich, Sie fallen zurück auf der python-parser, weil der usecols denke ich. und es wird stillschweigend ignoriert dtype. Versuchen Sie es mit 0.14.0 wird es a) Arbeit, IIRC, b) wird Sie warnen, wenn dies passiert ist (Sie können versuchen Sie zwingen den Motor mit engine='c', an welchem Punkt ich denke, es wird sich beschweren, (auch in 0.13.1)
  • 0.13.1 nicht zu beanstanden, selbst mit einem expliziten engine='c'. Ich aktualisiert auf 0.14.1 und es funktioniert immer noch nicht, aber Sie sind richtig über Sie Warnung, warum. ValueError: Falling back to the 'python' engine because the 'c' engine does not support skip_footer, but this causes 'dtype' to be ignored as it is not supported by the 'python' engine. (Note the 'converters' option provides similar functionality.)
  • ok, ja, die Warnungen sind besser. eine weitere option ist ausdrücklich wirken, z.B. df['ORDER NO'] = df['ORDER NO'].astype(object) nach der Erstellung.
  • Ich brauche, um führende 0 da manchmal alles importiert als strings (wenn der KUNDE enthält X3615 zum Beispiel). Ich denke, ich kann nur df['CUSTOMER'] = df['CUSTOMER'].apply(lambda x: ('00000' + str(x))[-5:]) es sei denn, es gibt einen besseren Weg
  • Sie können die drop - skip_footer option und fallen aus dem Rahmen nach (obwohl dies könnte Ursache dtype Fragen selbst), könnte man auch pre-filter, um loszuwerden, der Fußzeile. als ein beiseite, Sie könnten dazu beitragen, die fehlenden Fragen! (die dtype fehlt die python-engine ist ziemlich einfach eigentlich)

InformationsquelleAutor Ripster | 2014-07-15
Schreibe einen Kommentar