簡體   English   中英

如何將硬幣市值 API 數據從 JSON 轉換為 Pandas ZC699575A5E8AFD9E22A7ECC8CAB1?

[英]How do I convert Coin Market Cap API data from JSON to Pandas Dataframe?

import requests
import pandas as pd
import APIKEY

url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'

parameters = {
    'start': '1',
    'limit': '10',
    'convert': 'USD'
}
headers = {
    'Accepts': 'application/json',
    'X-CMC_PRO_API_KEY': APIKEY.KeyAPI,
}

jsondata = requests.get(url, params=parameters, headers=headers).json()

CoinDF = pd.read_json(jsondata)

CoinDF.to_csv(r'/home/USER/Documents/CoinData.csv')

我正在嘗試讓 Pandas 讀取 API 返回的 JSON 數據,但是當我運行此程序時出現此錯誤

Traceback (most recent call last):
  File "/home/crow/PycharmProjects/CoinTracker/CoinMarketCapAPI.py", line 24, in <module>
    CoinDF = pd.read_json(jsondata, orient='index')
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/util/_decorators.py", line 199, in wrapper
    return func(*args, **kwargs)
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/util/_decorators.py", line 299, in wrapper
    return func(*args, **kwargs)
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/io/json/_json.py", line 540, in read_json
    json_reader = JsonReader(
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/io/json/_json.py", line 622, in __init__
    data = self._get_data_from_filepath(filepath_or_buffer)
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/io/json/_json.py", line 659, in _get_data_from_filepath
    self.handles = get_handle(
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/io/common.py", line 558, in get_handle
    ioargs = _get_filepath_or_buffer(
  File "/home/crow/PycharmProjects/CoinTracker/venv/lib/python3.8/site-packages/pandas/io/common.py", line 371, in _get_filepath_or_buffer
    raise ValueError(msg)
ValueError: Invalid file path or buffer object type: <class 'dict'>

與 API 的連接正在工作,但由於某種原因,我無法讓 Pandas 讀取它給出的內容。

謝謝您的幫助

編輯:

所以我做了一些修改,我認為掛斷是 JSON 文件的結構。

它似乎是一個字典列表,但其中至少有一組嵌套字典。 像這樣...

[string1{blah:blah},string2{blah:blah,blah:blah,Nest{nest1:nest2}}]

. 當我剛剛嘗試從 JSON 到 dataframe 閱讀此內容時,我認為它在第二級詞典中窒息。 我想現在的問題是如何在 Pandas 中使嵌套字典鍵成為自己的列

編輯2:由於某種原因,JSON 文件使用單引號而不是雙引號,我認為這會搞砸一切。 如果有人有一個好的答案,我會留下這個問題,但我不確定是否有一個好的解決方案。

最終編輯:

import requests
import pandas as pd
import KeyStuff
import json

url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'

parameters = {
    'start': '1',
    'limit': '10',
    'convert': 'USD'
}
headers = {
    'Accepts': 'application/json',
    'X-CMC_PRO_API_KEY': KeyStuff.APIKey,
}

resp = requests.get(url, params=parameters, headers=headers)
jsondata = json.loads(resp.text)
CoinDF = pd.json_normalize(jsondata['data'])

CoinDF.to_csv("C:\\Users\\USER\\Documents\\Junk\\CMCAPIDF.csv")

這是最終的功能代碼。 非常感謝喬納森·萊昂!

這里有很好的文檔: https://coinmarketcap.com/api/documentation/v1/#operation/getV1CryptocurrencyListingsLatest

嘗試這樣的事情(因為我沒有完全看到你是什么,你可能會玩一點)。

resp = requests.get(url, params=parameters, headers=headers)
jsondata = json.loads(resp.text)
CoinDF = pd.json_normalize(jsondata['data'])

一些想法:個人而言,我從未使用過 api 響應中的read_json() ,但這可能只是個人喜好,但有時它只是不起作用。 另一種方法是pd.DataFrame(your_data) ,但這並不總是能正確解析。 不過,這是我的 go。 但是對於這個,我認為他們將其包裝在一個列表中,因此json_normalize()效果很好。

此外,當收到 api 響應時,您應該仔細查看結構。 您可能需要也可能需要status鍵,但您確實需要data鍵,因此jsondata['data']

使用電報機器人 API 進行測試,它返回 json 響應的類型。 有用

import requests
import json
import pandas as pd
rs = requests.get('https://api.telegram.org/bot105574XXXXYYYYSSSXXXXXA/getupdates')

#Actually the data is <class 'dict'>, so enclose with pd.DataFrame.from_dict() works.
df = pd.DataFrame.from_dict(pd.json_normalize(rs.json()), orient='columns')
df.to_csv('api.csv')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM