2015-10-30 19 views
11

非常に大きなcsv(Excelで開くことはできず、簡単に編集できます)でも100,000行目のどこかに読み込みたい場合は、プログラムがクラッシュする余分な列が1行あります。この行はエラーが発生しているため、追加の列であるという事実を無視する方法が必要です。約50列があるので、ヘッダーをハードコーディングし、名前やusecolsを使用することは好ましくありません。私は、おそらく他のcsvのこの問題に遭遇し、一般的な解決策が必要です。残念ながらread_csvで何も見つかりませんでした。コードはこのように簡単です:誤った行をスキップするPandasデータフレームread_csvで不良データ

def loadCSV(filePath): 
    dataframe = pd.read_csv(filePath, index_col=False, encoding='iso-8859-1', nrows=1000) 
    datakeys = dataframe.keys(); 
    return dataframe, datakeys 
+0

誤ったデータをスキップするにはerror_bad_lines = Falseを設定します – EdChum

答えて

28

パスerror_bad_lines=False

error_bad_lines:ブール、あまりにも多くの分野 (あまりにも多くのカンマで例えばCSV行)との真の行をデフォルトデフォルトでは 例外が発生し、DataFrameは返されません。 Falseの場合、 これらの「不良ライン」は、 が返されたDataFrameから削除されます。 (Cパーサでのみ有効)

+0

私はそのことを忘れています。私が現在やりたいことはうまくいくだろうが、道のりでは余計な付加価値なしで行が欲しい。 – Fonti

+0

別の方法としては、1行を読み込んで正しい数の列を取得し、再度読み込んでその列のみを読み取る方法があります。 'cols = pd.read_csv(file、nrows = 1).columns df = pd.read_csv(file、usecols = cols)'これは、エラー行について考えている追加の列を無視して、それを試してみてください – EdChum

+1

@Fonti: 'truncate_bad_lines'のオプションはありません。そうすることは悪い習慣になるでしょう。あなたは、データが悪い(なぜならそれに付加価値がある)理由を事前に知っていると仮定します。しかし、列が少なすぎるとどうなりますか?付加価値が追加されずに挿入された場合はどうなりますか?このようなことはバグのマグネットです。 –

関連する問題