从不均匀的字典列表创建 Pandas DataFrame

Creating a Pandas DataFrame from Uneven List of Dictionaries

我正在尝试将字典放入格式化的 DataFrame 中。

我正在通过来自 https://www.cryptonator.com/api

的 API 调用获取数据
r = requests.get('https://api.cryptonator.com/api/ticker/btc-usd')
x = r.json()

返回的数据格式为:

{"ticker":{"base":"BTC","target":"USD","price":"443.7807865468","volume":"31720.1493969300","change":"0.3766203596"},
"timestamp":1399490941,
"success":true,
"error":""
}

我只对字典中的部分数据"ticker"和键值对感兴趣,"timestamp"。

我的问题是,由于 "ticker" 是字典中的字典,而 "timestamp" 只是一个键值对,我似乎无法将它们导入到这个特定的 Pandas DataFrame 中:

  base           price   timestamp            volume
0  BTC  443.7807865468  1399490941  31720.1493969300

我尝试了几种方法,但并不能完全满足我的需求,包括:

pd.DataFrame(x).T 
                 base       change          price      target          volume
ticker            BTC  -8.71469546  1532.83742332         USD  22275.83826859
timestamp  1493925662   1493925662     1493925662  1493925662      1493925662

你可以拉出你需要的碎片

pd.DataFrame({
        'ticker': x['ticker'],
        'timestamp': x['timestamp']
    }).T

                 base        change           price      target            volume
ticker            BTC  0.3766203596  443.7807865468         USD  31720.1493969300
timestamp  1399490941    1399490941      1399490941  1399490941        1399490941

旧答案

pd.io.json.json_normalize(x)

  error success ticker.base ticker.change    ticker.price ticker.target     ticker.volume   timestamp
0          True         BTC  0.3766203596  443.7807865468           USD  31720.1493969300  1399490941