熊猫:如何加载包含多个txt文件的zip文件?

时间:2017-04-19 12:47:35

标签: python csv pandas zip

我的路径中存储了很多zip个文件

  • mypath/data1.zip
  • mypath/data2.zip

每个zip文件包含三个不同的txt文件。例如,在data1.zip中有:

  • data1_a.txt
  • data1_b.txt
  • data1_c.txt

我需要从每个压缩文件(即datai_c.txtdata1_c.txtdata2_c.txt等)加载data3_c.txt并将它们连接到数据框中。

不幸的是我无法使用read_csv这样做,因为它只适用于单个压缩文件。

任何想法怎么做?谢谢!

2 个答案:

答案 0 :(得分:6)

所以你需要一些其他代码才能进入zip文件。以下是来自O'Reilly的 Python Cookbook

的修改代码
import zipfile
import pandas as pd
## make up some data for example
x = pd.DataFrame({"A": [1, 2], "B": [3, 4]}) 
x.to_csv('a.txt', sep="|", index=False) 
(x * 2).to_csv('b.txt', sep="|", index=False)

with zipfile.ZipFile('zipfile.zip', 'w') as myzip:
    myzip.write('a.txt')
    myzip.write('b.txt')
    for filename in z.namelist( ): print 'File:', filename,
         insideDF = pd.read_csv(StringIO(z.read(filename)))
         df = pd.concat([df, insideDF])
print df

答案 1 :(得分:1)

您希望使用patool库,如下所示:

import patool
import pandas as pd
compression = zipfile.ZIP_DEFLATED
patoolib.extract_archive('mypath/data1.zip', outdir='mypath', interactive=False, verbosity=-1)

使用DataFrame将每个文本文件存储在read_csv中,如下所示:     df = pd.read_csv('mypath / data1_a')

然后使用pd.concat以您想要的任何方式连接数据帧。