Pandasのドキュメントによると、pandas.read_csv(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)は、error_bad_linesとwarn_bad_linesがTrueに設定されていても、不良ラインの検出をサポートする必要があります。
だから私はtest.csvと呼ばれる悪いフォーマットのcsvを作成しました:
aaa,bbb,ccc
ssdf,sdtf,aesrt,,,,
eart,erate
aert,aert,aert
そしてread_csvを実行します:
>>> pd.read_csv('test.csv', error_bad_lines = True )
aaa bbb ccc
ssdf sdtf aesrt NaN NaN NaN NaN
eart erate NaN NaN NaN NaN NaN
ドキュメントを理解しているので、エラーが発生しない場合を除いて、エラーが発生するはずです。代わりに、不正なcsvが読み込まれます。パンダはerror_bad_lines / warn_bad_linesのすべてを無視しているようです。
ドキュメントの理解が間違っているのでしょうか、それともパンダのバグなのですか?正しいcsvのみをロードするためのエレガントな回避策を知っている人はいますか?
Python 3.6.8、Pandas 0.25.0、Ubuntu18.04を使用しています。
いくつかのテストを行ったところ、2行目で、ファイルの残りの部分で予想される列の数が決まることがわかりました。
たとえば、2行目(ssdf、sdtf、aesrt 、、、、、)には7つの列があります。したがって、次のすべての行の列が7未満の場合、エラーは発生しません。
1つの行を7以上に変更すると、クラッシュします。error_bad_linesのデフォルト値はtrueであるため、明示的に指定する必要はありません。
エラーのない例:
data.csv:
0,jjjjjj
1,er,ate,, # 5 columns
2,bb,b
3,sdtf,aesrt,ll,sdfd # 5 columns, so no errors appear.
4,erate,
5,aert,aert
df1 = pd.read_csv('data.csv')
df1
結果:エラーなし
0 jjjjjj
1 er ate NaN NaN
2 bb b NaN NaN
3 sdtf aesrt ll sdfd
4 erate NaN NaN NaN
5 aert aert NaN NaN
エラーのある例:
data.csv:
0,jjjjjj
1,er,ate,, # 5 columns
2,bb,b
3,sdtf,aesrt,ll,sdfd,sdf,sdf,sdf,sdf, # more than 5 columns
4,erate,
5,aert,aert
df1 = pd.read_csv('data.csv')
df1
結果:エラー!!
ParserError: Error tokenizing data. C error: Expected 5 fields in line 4, saw 10
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加