2016-12-28 7 views
0

私はAPIを介してJSONデータをインポートしようとしており、インポートしたデータを使ってDataFrameを構築しようとしています。api経由でjsonデータをインポートするときに "TypeError:expected string or buffer"を解決するにはどうすればいいですか?

import json 
import pandas as pd 
import numpy as np 
import requests 

api_username = 'acb' 
api_password = 'efg' 

germany_name = 'Germany' 
germany_api_url = "https://api.country_data.com/stats/?country=" + germany_name + "&year=2014" 
germany_api_resp = requests.get(germany_api_url,auth=(api_username,api_password)) 
germany_data_json = json.loads(germany_api_resp) 
germany_frame = pd.DataFrame(germany_data_json['data']).set_index('tag') 

print(germany_frame)が私に希望するDataFrameを表示します。

私だけではなく'Germany'、多くの国のためのプロセスを繰り返したいので、私はこのような国オブジェクトを作成:

Germany = Country('Germany') 
:このように、私は私の最初のオブジェクトを作成すると

class Country(object): 
    def __init__(self,name): 
     self.name = name 
     self.api_url = "https://api.country_data.com/stats/?country=" + name + "&year=2014" 
     self.api_resp = requests.get(self.api_url,auth=(api_username,api_password)) 
     self.data_json = json.loads(self.api_resp) 
     self.frame = pd.DataFrame(self.data_json['data']).set_index('tag') 

エラーメッセージが表示されます:

TypeError: expected string or buffer 

誰かがこの問題を解決できますか?

+0

は大文字と小文字を区別しますか?この場合、 'Germany = Country( 'germany')' –

+0

私はまだ同じ問題を抱えています。私は恐れます:( – Dongs14173

+0

あなたは 'self.api_resp'で取得したデータを共有してください。コードを実行し、 'self.api_resp'オブジェクトを印刷して内容を確認してください。次の2行を別々に実行し、失敗した理由を確認してください。 –

答えて

1

使用しているPythonのバージョンと、requestsのバージョンはありませんが、すべてを更新することをお勧めします。ここで私が見つけたエラーは次のとおりです。

self.data_json = json.loads(self.api_resp) 

あなたはJSON-方法でリクエストからResponseをロードするので、それを変更しよう:

self.data_json = self.api_resp.json() 

あなたがいるので、私は別のものにあなたのAPIのURLを置き換えます間違って、それは私のために働く。

ya!

関連する問題