web-dev-qa-db-ja.com

pandas read_csv with gzip compression optionを使用してtar.gzファイルを読み取るにはどうすればよいですか?

Tar.gzファイル内に圧縮された以下のデータを含む非常に単純なcsvがあります。 pandas.read_csvを使用してデータフレームでそれを読む必要があります。

   A  B
0  1  4
1  2  5
2  3  6

import pandas as pd
pd.read_csv("sample.tar.gz",compression='gzip')

ただし、エラーが発生しています:

CParserError: Error tokenizing data. C error: Expected 1 fields in line 440, saw 2

Read_csvコマンドのセットと、それらで発生するさまざまなエラーを次に示します。

pd.read_csv("sample.tar.gz",compression='gzip',  engine='python')
Error: line contains NULL byte

pd.read_csv("sample.tar.gz",compression='gzip', header=0)
CParserError: Error tokenizing data. C error: Expected 1 fields in line 440, saw 2

pd.read_csv("sample.tar.gz",compression='gzip', header=0, sep=" ")
CParserError: Error tokenizing data. C error: Expected 2 fields in line 94, saw 14    

pd.read_csv("sample.tar.gz",compression='gzip', header=0, sep=" ", engine='python')
Error: line contains NULL byte

ここで何が問題になっていますか?どうすれば修正できますか?

11
Geet
df = pd.read_csv('sample.tar.gz', compression='gzip', header=0, sep=' ', quotechar='"', error_bad_lines=False)

注意: error_bad_lines=Falseは、問題のある行を無視します。

17
Marlon Abeykoon

tarfile module を使用して、tar.gzアーカイブから特定のファイルを読み取ることができます( この解決された問題 で説明されています)。アーカイブにファイルが1つしかない場合は、次を実行できます。

_import tarfile
import pandas as pd
with tarfile.open("sample.tar.gz", "r:*") as tar:
    csv_path = tar.getnames()[0]
    df = pd.read_csv(tar.extractfile(csv_path), header=0, sep=" ")
_

読み取りモード_r:*_は、gz拡張(または他の種類の圧縮)を適切に処理します。 zip圧縮されたtarファイルに複数のファイルがある場合は、csv_path = list(n for n in tar.getnames() if n.endswith('.csv'))[-1]行などの操作を実行して、アーカイブフォルダー内の最後のcsvファイルを取得できます。

0
user3780389