2016-12-12 160 views
1

我想將API調用轉換爲pandasdata frame將API轉換爲Pandas DataFrame

目前,API是非常無組織,我想納入pandas,以便於閱讀/編輯/操作。

我已經嘗試以下操作:

r = requests.get('http://api.football-data.org/v1/competitions/398/teams') 
x = r.json() 
df = pd.read_json(x) 
print df 

但得到:

TypeError: Expected String or Unicode 

回答

4

pd.read_json需要一個字符串。但是,r.json()返回一個字典對象。

對於您的情況,您應該查看x.keys(),以瞭解返回的JSON對象的結構。這將產生['count', '_links', 'teams']。您可能對'球隊'領域感興趣。

因此,你應該做到以下幾點:

r = requests.get('http://api.football-data.org/v1/competitions/398/teams') 
x = r.json() 
df = pd.DataFrame(x['teams']) 
print df 
2

read_json功能expects的字符串。您正在提供JSON對象(使用requests庫的方法json解析)。你需要做的是將對象轉換回使用json.dumps方法的字符串:

import json 

r = requests.get('http://api.football-data.org/v1/competitions/398/teams') 
x = r.json() 
df = pd.read_json(json.dumps(x)) 

甚至更​​好,只是得到直接請求對象的緩衝區,並且不將其轉換爲一個對象。

r = requests.get('http://api.football-data.org/v1/competitions/398/teams') 
df = pd.read_json(x.text) 
0

這種簡單的解決方案爲我(有問題的API鏈接無法訪問由我)

df=pd.read_json('https://api.coinmarketcap.com/v1/ticker/?limit=10') 
df.head() 


    24h_volume_usd available_supply   id last_updated \ 
0  12465900000   16812425  bitcoin 1516379664 
1  4827670000   97080757  ethereum 1516379652 
2  5091970000  38739142811  ripple 1516379641 
3  862348000   16920150 bitcoin-cash 1516379657 
4  678044000  25927070538  cardano 1516379659 

    market_cap_usd max_supply   name percent_change_1h \ 
0 198285740450 2.100000e+07  Bitcoin    0.88 
1 103477408544   NaN  Ethereum    0.02 
2  62593157388 1.000000e+11  Ripple    -0.63 
3  30726992400 2.100000e+07 Bitcoin Cash    0.41 
4  17206681852 4.500000e+10  Cardano    0.56 

    percent_change_24h percent_change_7d price_btc  price_usd rank \ 
0    -0.37    -15.41 1.000000 11794.000000  1 
1    -0.92    -15.24 0.090786 1065.890000  2 
2    -1.39    -20.53 0.000138  1.615760  3 
3    -2.43    -29.81 0.154675 1816.000000  4 
4    -4.15    -18.47 0.000057  0.663657  5 

    symbol total_supply 
0 BTC  16812425 
1 ETH  97080757 
2 XRP 99993093880 
3 BCH  16920150 
4 ADA 31112483745 
相關問題