[英]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.