tra-loi-cau-hoi-phat-trien-web.com

Làm cách nào tôi có thể đọc tệp tar.gz bằng cách sử dụng pandas read_csv với tùy chọn nén gzip?

Tôi có một csv rất đơn giản, với dữ liệu sau, được nén bên trong tệp tar.gz. Tôi cần đọc nó trong dataframe bằng 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')

Tuy nhiên, tôi đang gặp lỗi:

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

Sau đây là tập hợp các lệnh read_csv và các lỗi khác nhau mà tôi gặp phải với chúng:

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

Có chuyện gì ở đây vậy? Làm thế nào tôi có thể sửa lỗi này?

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

Ghi chú: error_bad_lines=False sẽ bỏ qua các hàng vi phạm.

17
Marlon Abeykoon

Bạn có thể sử dụng mô đun tarfile để đọc một tệp cụ thể từ kho lưu trữ tar.gz (như đã thảo luận trong vấn đề được giải quyết này ). Nếu chỉ có một tệp trong kho lưu trữ, thì bạn có thể làm điều này:

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=" ")

Chế độ đọc r:* Xử lý phần mở rộng gz (hoặc các loại nén khác) một cách thích hợp. Nếu có nhiều tệp trong tệp tar được nén, thì bạn có thể thực hiện một số thứ như dòng csv_path = list(n for n in tar.getnames() if n.endswith('.csv'))[-1] để lấy tệp csv cuối cùng trong thư mục lưu trữ.

0
user3780389