繁体   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