Ich benutze die Pandas-Bibliothek, um einige CSV-Daten einzulesen. In meinen Daten enthalten bestimmte Spalten Zeichenfolgen. Die Zeichenfolge "nan"
ist ein möglicher Wert, ebenso wie eine leere Zeichenfolge. Ich habe es geschafft, Pandas dazu zu bringen, "nan" als Zeichenfolge zu lesen, aber ich kann nicht herausfinden, wie ich es bekomme, einen leeren Wert nicht als NaN zu lesen. Hier sind Beispieldaten und Ausgabe
One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven
>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
One Two Three
0 a 1 one
1 b 2 two
2 NaN 3 three
3 d 4 nan
4 e 5 five
5 nan 6 NaN
6 g 7 seven
Es liest "nan" korrekt als Zeichenfolge "nan", liest aber immer noch die leeren Zellen als NaN. Ich habe versucht, str
das converters
Argument an read_csv (with converters={'One': str})
) zu übergeben, aber es liest die leeren Zellen immer noch als NaN.
Mir ist klar, dass ich die Werte nach dem Lesen mit fillna füllen kann, aber gibt es wirklich keine Möglichkeit, Pandas mitzuteilen, dass eine leere Zelle in einer bestimmten CSV-Spalte als leere Zeichenfolge anstelle von NaN gelesen werden sollte?
keep_default_na
unten.Antworten:
Ich habe ein Ticket hinzugefügt, um hier eine Option hinzuzufügen:
https://github.com/pydata/pandas/issues/1450
In der Zwischenzeit
result.fillna('')
sollte tun, was Sie wollenBEARBEITEN: Wenn Sie in der Entwicklungsversion (endgültig 0.8.0) eine leere Liste angeben
na_values
, bleiben leere Zeichenfolgen im Ergebnis leerquelle
DataFrame.fillna
. Versuchen Sie esresult.fillna('', inplace=True)
. Andernfalls wird eine Kopie des Datenrahmens erstellt.na_values
(durch Spalten indizierte Liste oder Diktat ) als auchkeep_default_na
(bool). Derkeep_default_na
Wert gibt an, ob die Standard-NA-Werte von Pandas ersetzt oder angehängt werden sollen. Der OP-Code funktioniert derzeit nicht, nur weil dieses Flag fehlt. Für dieses Beispiel könnten Sie verwendenpandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False)
.keep_default_na
. Beachten Sie jedoch, dass er nicht möchte, dass 'nan' auch als Standard behandelt wird. Ich habe eine vollständigere Erklärung als neue Antwort hinzugefügt.Ich war immer noch verwirrt, nachdem ich die anderen Antworten und Kommentare gelesen hatte. Aber die Antwort scheint jetzt einfacher zu sein, also los geht's.
Seit Pandas Version 0.9 (ab 2012) können Sie Ihre CSV mit leeren Zellen lesen, die als leere Zeichenfolgen interpretiert werden, indem Sie einfach Folgendes festlegen
keep_default_na=False
:Dieses Problem wird in näher erläutert
Das wurde am 19. August 2012 für Pandas Version 0.9 in behoben
quelle
Wir haben ein einfaches Argument in Pandas read_csv dafür:
Verwenden:
In der Pandas-Dokumentation wird klar erklärt, wie das obige Argument funktioniert.
Verknüpfung
quelle
na_values
„nan“ zu erkennen, aber drehenna_filter
würde Niederlage aus ganz das. Also meine Antwort mitkeep_default_na=False
.