2014-01-19 103 views
0

我不確定我在這裏失蹤的內容,但是我有2個包含json文件的zip文件,我只是試圖將我從文件中提取的數據與結合爲一個數據幀,但我的循環不斷給我單獨的記錄。這是我在構建DF之前所擁有的。我試過pd.concat,但我認爲我的問題更多的是與我讀取文件的方式有關。在Python中將多個Json對象作爲一個DataFrame Pandas

data = [] 
for FileZips in glob.glob('*.zip'): 
    with zipfile.ZipFile(FileZips, 'r') as myzip: 
     for logfile in myzip.namelist(): 
      with myzip.open(logfile) as f: 
       contents = f.readlines()[-2] 
       jfile = json.loads(contents) 
       print len(jfile) 

回報:

40935 
40935 

回答

2

您可以使用read_json(假設它是有效 JSON)。

我也將打破這一成多個功能可讀性:

def zip_to_df(zip_file): 
    with zipfile.ZipFile(zip_file, 'r') as myzip: 
     return pd.concat((log_as_df(loglife, myzip) 
          for logfile in myzip.namelist()), 
         ignore_index=True) 

def log_as_df(logfile, myzip): 
    with myzip.open(logfile, 'r') as f: 
     contents = f.readlines()[-2] 
     return pd.read_json(contents) 

df = pd.concat(map(zip_to_df, glob.glob('*.zip')), ignore_index=True) 

注:這確實更concats,但我認爲這是值得的可讀性,你可以做一個CONCAT ...

1

我能得到什麼,我需要一個小的調整,以我的縮進!

dfs = [] 
for FileZips in glob.glob('*.zip'): 
    with zipfile.ZipFile(FileZips, 'r') as myzip: 
     for logfile in myzip.namelist(): 
      with myzip.open(logfile, 'r') as f: 
       contents = f.readlines()[-2] 
       jfile = json.loads(contents) 
       dfs.append(pd.DataFrame(jfile)) 
       df = pd.concat(dfs, ignore_index=True) 
print len(df) 
+0

我想你可以將concat從所有縮進中移出。我的感覺是,這應該被分解成單獨的功能以提高可讀性。 –

相關問題