【问题标题】:Get a data frame from a part of a string [closed]从字符串的一部分获取数据框[关闭]
【发布时间】:2022-01-18 09:55:50
【问题描述】:

我将市场信息作为这样的字符串:

{"POLISUSDT": {"name": "POLISUSDT", "min_amount": "0.5", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 4, "trading_name": "POLIS", "trading_decimal": 8}, "XPRBTC": {"name": "XPRBTC", "min_amount": "100", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "BTC", "pricing_decimal": 10, "trading_name": "XPR", "trading_decimal": 8}, "PSPUSDT": {"name": "PSPUSDT", "min_amount": "5", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 4, "trading_name": "PSP", "trading_decimal": 8}, "KAVAUSDT": {"name": "KAVAUSDT", "min_amount": "0.5", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 4, "trading_name": "KAVA", "trading_decimal": 8}, "CFXUSDT": {"name": "CFXUSDT", "min_amount": "10", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 6, "trading_name": "CFX", "trading_decimal": 8}}

我想要每个市场的信息,分别。例如,如果我调用“POLISUSDT”,我想得到这个数据框:

min_amount maker_fee_rate taker_fee_rate pricing_name pricing_decimal trading_name trading_decimal
0.5 0.003 0.003 USDT 4 POLIS 8

【问题讨论】:

  • 您的字符串中有错误。请解决它并更新问题。

标签: python pandas string dataframe substring


【解决方案1】:

请注意,我在解析您的 json 时发现了一些问题 - 在 message 字段之前有一个额外的 }

除此之外,如果您有 json 的 str 表示(我们称之为 json_str),您可以使用以下方法将其加载到大数据框中:

import pandas as pd

dt = pd.read_json(json_str).transpose()

在这部分代码中,你应该删除你不感兴趣的列。

您可以使用以下方式访问任何元素:

dt.loc[["POLISUSDT"]]

【讨论】:

    【解决方案2】:

    从样本中删除错误数据后,可以使用带有json_normalize 的字典理解:

    d ={"POLISUSDT": {"name": "POLISUSDT", "min_amount": "0.5", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 4, "trading_name": "POLIS", "trading_decimal": 8}, "XPRBTC": {"name": "XPRBTC", "min_amount": "100", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "BTC", "pricing_decimal": 10, "trading_name": "XPR", "trading_decimal": 8}, "PSPUSDT": {"name": "PSPUSDT", "min_amount": "5", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 4, "trading_name": "PSP", "trading_decimal": 8}, "KAVAUSDT": {"name": "KAVAUSDT", "min_amount": "0.5", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 4, "trading_name": "KAVA", "trading_decimal": 8}, "CFXUSDT": {"name": "CFXUSDT", "min_amount": "10", "maker_fee_rate": "0.003", "taker_fee_rate": "0.003", "pricing_name": "USDT", "pricing_decimal": 6, "trading_name": "CFX", "trading_decimal": 8}}
    

    df = {k: pd.json_normalize(v) for k, v in d.items()}
    print (df['POLISUSDT'])
            name min_amount maker_fee_rate taker_fee_rate pricing_name  \
    0  POLISUSDT        0.5          0.003          0.003         USDT   
    
       pricing_decimal trading_name  trading_decimal  
    0                4        POLIS                8  
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      df = pd.DataFrame(data)
      df_dict = {col: df[col].drop('name', axis=0).rename(None).to_frame().T for col in df.columns}
      
      print(df_dict['POLISUSDT'])
      

      输出:

        min_amount maker_fee_rate taker_fee_rate pricing_name pricing_decimal  trading_name  trading_decimal  
      0        0.5          0.003          0.003         USDT               4   POLIS               8  
      
         trading_decimal  
        
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-12
        • 2023-03-16
        • 1970-01-01
        • 2016-06-13
        相关资源
        最近更新 更多