簡體   English   中英

如何使用帶有gzip壓縮選項的pandas read_csv讀取tar.gz文件?

[英]How can I read tar.gz file using pandas read_csv with gzip compression option?

我有一個非常簡單的csv,其中包含以下數據,在tar.gz文件中壓縮。 我需要使用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

這里出了什么問題? 我怎樣才能解決這個問題?

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

注意: error_bad_lines=False將忽略有問題的行。

您可以使用tarfile模塊從tar.gz存檔中讀取特定文件(如本已解決的問題中所述 )。 如果存檔中只有一個文件,則可以執行以下操作:

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擴展(或其他類型的壓縮)。 如果壓縮的tar文件中有多個文件,那么你可以做一些像csv_path = list(n for n in tar.getnames() if n.endswith('.csv'))[-1]行, csv_path = list(n for n in tar.getnames() if n.endswith('.csv'))[-1]來獲取最后一個文件存檔文件夾中的csv文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM