熊猫:将WinZipped csv文件转换为数据帧

时间:2013-07-22 14:17:18

标签: python pandas

我有几个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中的数据框。

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

2 个答案:

答案 0 :(得分:5)

您只需要解压缩文件:

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

filepath_or_buffer的{​​{1}}参数接受任何类似文件的参数。

答案 1 :(得分:1)

Pandas 0.18.1 从开箱即用添加了Zip支持:

IsSynchronizedWithCurrentItem="False"

事实上,由于默认参数为df = pd.read_csv('my_zipped_csv.zip', compression = 'zip') ,您只需抛出compression = 'infer'个扩展名即可,并且知道该怎么做:

.zip