2013-07-22 261 views
3

我有幾個WinZipped csv文件,並希望將它們作爲熊貓數據框讀取。問題是沒有解壓縮選項('gzip'或'bz2')似乎工作。這裏的文件是什麼樣子:熊貓:將WinZipped csv文件轉換爲數據幀

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

如此看來,我將不得不解壓縮使用Python的zip文件模塊的文件,在線閱讀,從我讀我的思維方式創建一個數據幀。這樣做,這是創建一個字典列表如下:

[ 
    {"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將它轉換爲一個數據幀的。

但是,這似乎涉及很多手動操作線 - 有沒有更好的方法來做到這一點?

回答

5

你只需要解壓縮文件:

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

的​​參數read_table接受任何類似文件的說法。

+0

非常感謝。我一直在試圖看看是否有效,問題是'zipfile.ZipFile('/ path/to/file','r')中的檔案包含多個文件。任何想法如何提供檔案中的其中一個文件的路徑? – Anne

+0

@肯定,使用'ZipFile.open'。見http://docs.python.org/2/library/zipfile – ecatmur

+0

FWIW我需要做的:zipfile.Zipfile('path/to/file'。'r')作爲z:而不是指定的第一行解決方案 – dartdog

1

熊貓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')