【问题标题】:Can't seem to figure out why I can't read JSON into DataFrame似乎无法弄清楚为什么我无法将 JSON 读入 DataFrame
【发布时间】:2017-06-10 12:20:00
【问题描述】:

如何将此 JSON 的“数据”部分转换为简单的熊猫表。这是我所拥有的:

import json
import urllib.request
import pandas

url = urllib.request.urlopen('https://www.cryptocompare.com/api/data/coinlist/')
json_obj = json.load(url)
print(json.dumps(json_obj, sort_keys=True, indent=4))

json_data = json_obj['Data']
print(json.dumps(json_data, sort_keys=True, indent=4))

df = pandas.DataFrame(json_data)
with pandas.option_context('display.max_rows', None, 'display.max_columns', 3):
    print(df)

尝试了很多方法,但结果看起来不正确。该表应为:

CoinName,Algorithm,...
ABC,          AAA, ...
DEF,          DDS, ...

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    我觉得不错

    pandas.DataFrame(json_obj['Data']).T
    
              Algorithm          CoinName                 FullName FullyPremined  
    007          Scrypt          007 coin           007 coin (007)             0   
    1337            X13              1337              1337 (1337)             0   
    1CR          Scrypt           1Credit            1Credit (1CR)             0   
    1ST             N/A        FirstBlood         FirstBlood (1ST)             1   
    2015            X11         2015 coin         2015 coin (2015)             0   
    2BACCO       Scrypt       2BACCO Coin     2BACCO Coin (2BACCO)             0   
    2GIVE        Scrypt         2GiveCoin        2GiveCoin (2GIVE)             0   
    32BIT           X11         32Bitcoin        32Bitcoin (32BIT)             0   
    365             X11           365Coin            365Coin (365)             0   
    404          Scrypt           404Coin            404Coin (404)             0   
    42           Scrypt           42 Coin             42 Coin (42)             0   
    611          SHA256         SixEleven          SixEleven (611)             0   
    808          SHA256               808                808 (808)             0   
    888             N/A          Octocoin           Octocoin (888)             0   
    

    【讨论】:

    • 呃.. 缺少 .T
    【解决方案2】:

    不是一个完整的答案,但我没有发表评论的声誉。

    urllib.request.urlopen 正在返回一个对象,但 json.load 需要一个字符串。

    如果您正在寻找一个字符串,那么您一定是使用了错误的方法。 https://docs.python.org/3.4/library/urllib.request.html?highlight=urllib.request.urlopen#urllib.request.urlopen

    >>> json_obj = json.load(url)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File  "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 312, in loads
    s.__class__.__name__))
    TypeError: the JSON object must be str, not 'bytes'    
    >>> url.info()
    <http.client.HTTPMessage object at 0x105ab3518>    
    >>> url.getcode()
    200
    

    【讨论】:

      【解决方案3】:

      一旦您阅读了 JSON,您现在实际上在 json_data 中有一个 Python dict。因此,您需要pandas.DataFrame.from_dict

      df = pandas.DataFrame.from_dict(json_obj['Data'], orient='index')
      

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2011-07-08
        • 1970-01-01
        • 1970-01-01
        • 2014-05-19
        • 2020-11-14
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        相关资源
        最近更新 更多