【问题标题】:Read json output into Pandas Dataframe将 json 输出读入 Pandas Dataframe
【发布时间】:2018-06-23 01:15:45
【问题描述】:

如何将以下 json 输出放入 pandas 数据框?

[{'currency': '1ST', 'available': '0', 'reserved': '0'}, {'currency': '8BT', 'available': '0', 'reserved': '0'}, {'currency': 'ADX', 'available': '0', 'reserved': '0'}, {'currency': 'AE', 'available': '0', 'reserved': '0'}, {'currency': 'AEON', 'available': '0', 'reserved': '0'}, {'currency': 'AIR', 'available': '0', 'reserved': '0'}, {'currency': 'AMB', 'available': '0', 'reserved': '0'}, {'currency': 'AMM', 'available': '0', 'reserved': '0'}, {'currency': 'AMP', 'available': '0', 'reserved': '0'}]

我尝试了以下方法,但只收到以下错误:

代码

balances = pd.read_json(data)

错误

ValueError: Invalid file path or buffer object type: <class 'method'>

编辑 - 我如何获取数据:

def get_account_balance(self):
    """Get main balance."""
    return self.session.get("https://api.hitbtc.com/api/2/account/balance").json()

【问题讨论】:

    标签: json pandas


    【解决方案1】:

    IIUC 假设你有一本字典:

    In [231]: d = [{'currency': 'ZRX', 'available': '0', 'reserved': '0'}, {'currency': 'ZSC', 'available': '0', 'reserved': '0'}]
    
    In [235]: pd.DataFrame(d)
    Out[235]:
      available currency reserved
    0         0      ZRX        0
    1         0      ZSC        0
    

    如果是字符串(损坏的 JSON,因为 JSON 必须有双引号而不是单引号):

    import json
    
    In [238]: s = """
         ...: [{'currency': 'ZRX', 'available': '0', 'reserved': '0'}, {'currency': 'ZSC', 'available': '0', 'reserved': '0'}]
         ...: """
    
    In [239]: d = json.loads(s.replace("'", '"'))
    
    In [240]: pd.DataFrame(d)
    Out[240]:
      available currency reserved
    0         0      ZRX        0
    1         0      ZSC        0
    

    【讨论】:

    • 使用您的字符串方法时出现以下错误:AttributeError: 'list' object has no attribute 'replace'。请参阅上面关于我如何获取数据的编辑。
    • @alpenmilch411,请提供一个小的可重现样本数据集,以便我们重现您的问题
    • 请原谅我的无知,但您对可重现的样本数据集到底是什么意思?请参阅我上面的编辑。 @MaxU
    • @alpenmilch411,我的意思是我们需要一个数据集来帮助我们重现您的错误。当我从您的问题中尝试数据集时-我的两个解决方案都可以正常工作-无论是字符串还是字典...
    • 好的,我上面的编辑解决了这个问题,但我猜有更好的方法来做到这一点。 @MaxU
    【解决方案2】:

    以下内容对我有用:

    pd.DataFrame.from_dict(data, orient='columns')
    

    来源:https://github.com/vi3k6i5/pandas_basics/blob/master/1_a_create_a_dataframe_from_dictonary.ipynb

    【讨论】:

      【解决方案3】:

      我在将 json 文件导入 pandas 数据框时遇到了同样的问题。我已经通过展平字典然后正常导入它们来解决它:

      def get_values(lVals):
          res = []
          for val in lVals:
              if type(val) not in [list, set, tuple]:
                  res.append(val)
              else:
                  res.extend(get_values(val))
          return res
      
      data = get_values(data)
      
      df = pd.DataFrame(data)
      

      【讨论】:

        【解决方案4】:

        参考:

        Python how convert single quotes to double quotes to format as json string | user3850

        import json
        import pandas as pd
        
        json_data = [{'currency': '1ST', 'available': '0', 'reserved': '0'}, {'currency': '8BT', 'available': '0', 'reserved': '0'}, {'currency': 'ADX', 'available': '0', 'reserved': '0'}, {'currency': 'AE', 'available': '0', 'reserved': '0'}, {'currency': 'AEON', 'available': '0', 'reserved': '0'}, {'currency': 'AIR', 'available': '0', 'reserved': '0'}, {'currency': 'AMB', 'available': '0', 'reserved': '0'}, {'currency': 'AMM', 'available': '0', 'reserved': '0'}, {'currency': 'AMP', 'available': '0', 'reserved': '0'}]
        
        json_format = json.dumps(json_data)
        
        json_df = pd.read_json(json_format)
        
        json_df.head()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          • 2017-11-14
          • 1970-01-01
          • 2019-11-14
          • 1970-01-01
          • 2020-03-28
          相关资源
          最近更新 更多