2014-06-27 72 views
2

我想使用json_normalize()函數將大型(大約900 MB)json文件規範化爲熊貓數據幀。這適用於我正在處理的所有其他文件(大小在150-500 MB之間),儘管它們每個都需要幾分鐘才能完成。然而,這個文件似乎只是永遠運行,永遠不會結束。我已經嘗試使用read_json()在正常化之前直接讀取json文件到DataFrame中,以及簡單地使用json.loads()從文件中加載json。兩種方法都有相同的結果。我正在使用的代碼是:熊貓json_normalize不能在Python中使用大型JSON文件

import pandas as pd 
import json 

path = mf.getPath('dataFile.json') 
testTrials = json.loads(open(path)) #testTrials = pd.read_json(path) 
testTrials = json_normalize(testTrials['rows']) 
+1

您的系統有多少內存?你的數據結構如何嵌套?你需要將所有數據加載到框架中嗎?鑑於'nested_to_record'(由'json_normalize'使用)爲每個字典做了深層複製,所以你需要大量的內存,我認爲它超過了3-4Gb。查看有多少RAM使用500MB文件進行估算。 – Rolando

+1

@Rho將可用的8 GB內存封裝起來。我使用了一種使用ijson逐行讀取的新方法,這樣可以完成該過程,但需要30分鐘。 – drew01886

回答

0

您可以將大的JSON文件拆分爲多個塊並一次處理一個塊。這樣的代碼:

from itertools import zip_longest 

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx" 
    args = [iter(iterable)] * n 
    return zip_longest(*args, fillvalue=fillvalue) 

dfs = [] 
chunk_size = 1000 
for json in grouper(jsons,chunk_size): 
    df = json_normalize(json) 
    dfs.append(df) 
pd.concat(dfs)