2016-12-18 37 views
0

我是python的新手。試圖建立我的情況下使用此代碼link無法將完整數據從json文件加載到數據框中

我有200k的json文件,需要把它放在一個數據幀。

爲了達到這個目的,我爲我的問題製作了樣例,它看起來像這樣。

我有一個文件夾'測試'與子目錄中的json文件。目錄如下:

test>test1>test1> 3 json files 
test>test2>test2> 3 json files 
test>test3>test3> 3 json files 

我試圖讓所有的9個JSON文件轉換成一個數據幀。我的代碼如下:

import json 
import os 
import pandas as pd 
import json 

jpath='C:\\Users\\Sharath\\Desktop\\test' 

result=[] 
for i in os.listdir(jpath): 
    k=os.path.join(jpath,i) 
    for j in os.listdir(k): 
     l=os.path.join(k,j) 
     result.append(l) 
print(result) 

['C:\\Users\\Sharath\\Desktop\\test\\test1\\test1', 'C:\\Users\\Sharath\\Desktop\\test\\test2\\test2', 'C:\\Users\\Sharath\\Desktop\\test\\test3\\test3'] 

jsons_data = pd.DataFrame(columns=['homepage_url', 'number_of_employees', 'email_address']) 
for i in range(len(result)): 
    for j in os.listdir(result[i]): 
     with open(os.path.join(result[i],j)) as jfile: 
      jtext=json.load(jfile)   
      homepage_url = jtext['homepage_url'] 
      number_of_employees = jtext['number_of_employees'] 
      email_address = jtext['email_address'] 
      jsons_data.loc[index]=[homepage_url,number_of_employees,email_address] 
     print(jsons_data) 


      homepage_url number_of_employees   email_address 
2 http://www.01tek.com     1.0 [email protected] 
       homepage_url number_of_employees  email_address 
2 http://www.123listo.com     NaN [email protected] 
         homepage_url number_of_employees email_address 
2 http://www.immortaloutdoors.com     NaN    
         homepage_url number_of_employees \ 
2 http://www.1on1fitnesstraining.com     50.0 

         email_address 
2 [email protected] 
        homepage_url number_of_employees  email_address 
2 http://1onlybat.bigcartel.com     NaN [email protected] 
      homepage_url number_of_employees  email_address 
2 http://www.1doc3.com     5.0 [email protected] 
      homepage_url number_of_employees email_address 
2 http://1phoneapp.com     10.0    
    homepage_url number_of_employees email_address 
2   None     NaN    
         homepage_url number_of_employees \ 
2 http://www.1stalliancelending.com     51.0 

       email_address 
2 [email protected] 

,當我試圖通過調用jsons_data看數據框,結果如下:

enter image description here

我無法理解爲什麼我收到只有一個索引爲2的結果。 請幫助我如何使用此方法獲取數據幀中的所有9個文件。

+0

我不認爲你已經分配或更新變量'在你的代碼index'任何地方。如果是這樣,那麼它總是等於零,並且最終列表包含單個結果,以最後處理的文件爲準。 –

+0

您是否考慮過pd.read_json(),然後連接數據框?平均有多大的文件?這可能是一個選項。 如果你想遵循鏈接中的方法,你應該更新索引(仔細看看你使用的鏈接,他們更新索引變量),如@ K.A.Buhr – fedepad

回答

0

有幾種方法可以做到這一點。一種是使用pd.read_json(),然後連接數據幀。假設你要使用的方法在你提到的鏈接,你需要在循環更新變量指標,所以你可以改變你的代碼,以便您的主循環將是:

for i in range(len(result)): 
    for index, j in enumerate(os.listdir(result[i])): 
     with open(os.path.join(result[i],j)) as jfile: 
      jtext=json.load(jfile)   
      homepage_url = jtext['homepage_url'] 
      number_of_employees = jtext['number_of_employees'] 
      email_address = jtext['email_address'] 
      jsons_data.loc[index]=[homepage_url,number_of_employees,email_address] 
     print(jsons_data) 

注意怎麼行:

for j in os.listdir(result[i]): 

變成

for index, j in enumerate(os.listdir(result[i])):