Pandas:将WinZipped CSV文件转换为数据框架

4

我有几个WinZipped csv文件,想将它们作为Pandas dataframe读入。问题是,解压选项('gzip'或'bz2')似乎都不起作用。以下是文件的样子:

00000000011!00023011!89011!200812
00000000012!00023011!89011!200812
00000000013!00023011!89011!200812

看起来我需要使用Python的zipfile模块解压文件,读出行并从中创建一个数据框。我考虑的方式是创建一个字典列表,像这样:

[
    {"header1": 00000000011, "header2": 00023011, "header3": 89011, "header4": 200812}, 
    {"header1": 00000000012, "header2": 00023011, "header3": 89011, "header4": 200812},
    ...
]

然后按照http://pandas.pydata.org/pandas-docs/stable/dsintro.html#from-a-list-of-dicts中的方法将其转换为数据框。

但是,这似乎涉及到很多手动操作 - 有没有更好的方法来处理?

2个回答

7

您只需要解压文件:

with zipfile.ZipFile('/path/to/file', 'r') as z:
    f = z.open('member.csv')
    table = pd.io.parsers.read_table(f, ...)
read_table函数的filepath_or_buffer参数可以接受任何类似文件的参数。

非常感谢。我一直在尝试查看它是否有效,问题是zipfile.ZipFile('/path/to/file', 'r')中的归档包含多个文件。您有什么想法如何提供到存档文件中一个文件的路径? - Anne
顺便说一下,我需要执行以下操作:zipfile.Zipfile('path/to/file','r')作为z:而不是解决方案指定的第一行。 - dartdog

3

Pandas 0.18.1可以直接支持Zip压缩:

df = pd.read_csv('my_zipped_csv.zip', compression = 'zip')

实际上,由于默认参数为compression = 'infer',因此您可以将任何带有.zip扩展名的内容放在其中,它就知道该怎么做:

df = pd.read_csv('my_zipped_csv.zip')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接