2016-12-18 9 views
0

私はPythonを初めて使いました。これを使用して私の場合のコードを作成しようとしましたlinkjsonファイルからデータフレームに完全なデータをロードできませんでした

私は200kjsonファイルを持っており、それをデータフレームに入れる必要があります。

これを実現するために、私はこのような私の問題のサンプルケースを作った。

サブディレクトリにjsonファイルを含む 'test'フォルダがあります。ディレクトリは次のようになります。

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を使用した結果は1つだけです。 この方法を使用して、データフレーム内の9つのファイルをすべて取得する方法を教えてください。

+0

に変更

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

私はあなたがどこでも、あなたのコード内の変数 'index'を割り当てたり更新したとは思いません。そうであれば、それは常にゼロに等しく、最後のリストには処理された最後のファイルのうちの1つの結果が含まれます。 –

+0

pd.read_json()を考慮し、データフレームを連結しましたか?ファイルの平均サイズはどれくらいですか?これはオプションかもしれません。 リンク内のアプローチに従う場合は、@ K.A.Buhrで述べたように、インデックスを更新する必要があります(使用しているリンクを注意深く見て、インデックス変数を更新します)。 – fedepad

答えて

0

これを行う方法はいくつかあります。 1つは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 index, j in enumerate(os.listdir(result[i])): 
関連する問題