7

文字列として解釈する必要がある列を含むタブ区切りのファイルがありますが、エントリの多くは整数です。小さなファイルでは、 read_csv は、いくつかの非整数値を見た後に列を文字列として正しく解釈しますが、大きなファイルでは、これは機能しません:

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)

出力:

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

興味深いことに、262144 は 2 の累乗なので、推論と変換はチャンクで行われていると思いますが、いくつかのチャンクがスキップされています。

これがバグであることはかなり確信していますが、おそらく引用を使用する回避策が必要ですが、読み取りと書き込みに quoting=csv.QUOTE_NONNUMERIC を追加しても問題は解決しません。理想的には、文字列データを引用することでこれを回避し、引用されたデータに対して何らかの推論を行わないように pandas を強制することができます。

パンダ0.12.0の使用

4

2 に答える 2