Inkonsistente pandas read_csv dtype-Inferenz für die meist ganzzahlige Zeichenfolgenspalte in einer riesigen TSV-Datei

Ich habe eine durch Tabulatoren getrennte Datei mit einer Spalte, die als Zeichenfolge interpretiert werden sollte, aber viele der Einträge sind Ganzzahlen. Bei kleinen Dateien interpretiert read_csv die Spalte korrekt als Zeichenfolge, nachdem einige nicht ganzzahlige Werte angezeigt wurden. Bei größeren Dateien funktioniert dies jedoch nicht:

import pandas as pd
df = pd.DataFrame({'a':['1']*100000 + ['X']*100000 + ['1']*100000, 'b':['b']*300000})
df.to_csv('test', sep='\t', index=False, na_rep='NA')
df2 = pd.read_csv('test', sep='\t')
print df2['a'].unique()
for a in df2['a'][262140:262150]:
    print repr(a)

Ausgabe:

['1' 'X' 1]
'1'
'1'
'1'
'1'
1
1
1
1
1
1

Interessanterweise ist 262144 eine Potenz von 2, also denke ich, dass Inferenz und Konvertierung in Stücken stattfinden, aber einige Stücke überspringen.

Ich bin mir ziemlich sicher, dass dies ein Fehler ist, aber ich würde gerne eine Lösung finden, die möglicherweise das Zitieren verwendet, obwohl das Hinzufügen von quoting = csv.QUOTE_NONNUMERIC zum Lesen und Schreiben das Problem nicht behebt. Idealerweise könnte ich das umgehen, indem ich meine String-Daten in Anführungszeichen setze und Pandas irgendwie zwinge, keine Rückschlüsse auf die angegebenen Daten zu ziehen.

Verwenden von Pandas 0.12.0

Antworten auf die Frage(2)

Ihre Antwort auf die Frage