我有几个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中的数据框。
然而,这似乎涉及大量手动操作线 - 有没有更好的方法来做到这一点?
答案 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