2012-05-14 4 views
26

Ich bin gerade mit Pandas und ich lese in einer CSV-Datei mit der read_csv() Methode. Die Schwierigkeit, die ich habe, ist, zu verhindern, dass Pandas meine Telefonnummern in große Zahlen umwandeln, anstatt sie als Strings zu behalten. Ich habe einen Konverter definiert, der nur die Zahlen übrig ließ, aber dann wurden sie immer noch zu Zahlen konvertiert. Als ich meinen Konverter änderte, um ein 'z' an die Telefonnummern anzuhängen, blieben sie Saiten. Gibt es eine Möglichkeit, die Strings beizubehalten, ohne die Werte der Felder zu ändern?Angabe von Datentyp in Pandas CSV-Reader

+2

Bitte zeigen Sie uns Ihren Code –

+3

@Gardner: Haben Sie überlegt, eine Antwort zu akzeptieren? –

Antwort

13

Es sieht so aus, als könnten Sie Pandas nicht davon abhalten, numerische/boolesche Werte in der CSV-Datei zu konvertieren. Sehen Sie sich den Quellcode von Pandas für die IO-Parser an, insbesondere die Funktionen _convert_to_ndarrays und _convert_types. https://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

Sie immer den Typ zuordnen können Sie wollen nach Sie die Datei gelesen haben:

df.phone = df.phone.astype(str) 
+1

Dank @lbolla, half dies in einem meiner Bugfix, wo ein Float-Wert als String gelesen wurde, da eine andere Spalte String war, und später Probleme in Aggregation Funktionen verursacht. Ich musste tun df ['col'] = df ['col']. Astype (float64) –

28

Da 0.11.0 Pandas Sie dtype Argument explizit Daten für jede Spalte Typ angeben können:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

Beachten Sie, dass dies (hoffentlich noch) für einige andere Eingabefunktionen wie 'pandas.read_fwf()' – ReneSac

+2

I nicht verfügbar ist Ich habe das Thema noch einmal gelesen und die Unterstützung für 'dtype' wurde bereits zu' pandas.read_fwf' hinzugefügt :) – zero323

+0

Diese Methode funktioniert nicht für große Datensätze. Gibt es eine andere Möglichkeit, einen CSV und nur bestimmte Spalten zu lesen. –