3

我有几个 WinZipped csv 文件,并希望将它们作为 Pandas 数据框读取。问题是这两个解压缩选项(“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中的数据框。

但是,这似乎涉及大量的手动操作线 - 有没有更好的方法来做到这一点?

4

2 回答 2

6

您只需要解压缩文件:

with zipfile.ZipFile('/path/to/file', 'r') as z:
    f = z.open('member.csv')
    table = pd.io.parsers.read_table(f, ...)

接受任何类似文件的参数的参数filepath_or_bufferread_table

于 2013-07-22T14:27:52.680 回答
2

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')
于 2017-08-09T11:39:42.403 回答