【问题标题】:DataFrame of DataFrames PythonDataFrames Python的DataFrame
【发布时间】:2021-07-24 05:24:02
【问题描述】:

我有这个 Json 文件,

{
  "timezone": "UTC",
  "serverTime": 1565246363776,
  "rateLimits": […… ],
  "exchangeFilters": [….. ],
  "symbols": [
    {
      "symbol": "ETHBTC",
      "status": "TRADING",
      "baseAsset": "ETH",
      "baseAssetPrecision": 8,
      "quoteAsset": "BTC",
      "quotePrecision": 8,
      "quoteAssetPrecision": 8,
      "baseCommissionPrecision": 8,
      "quoteCommissionPrecision": 8,
      "filters": [
        {"filterType": "PRICE_FILTER",
            "minPrice": "0.00000100",
            "maxPrice": "100000.00000000",
            "tickSize": "0.00000100"},
        {"filterType": "PERCENT_PRICE",
            "multiplierUp": "1.3000",
            "multiplierDown": "0.7000",
            "avgPriceMins": 5}
        {"filterType": "LOT_SIZE",
            "minQty": "0.00100000",
            "maxQty": "100000.00000000",
            "stepSize": “0.00100000"}]
    }

我已将 Json 文件中的“符号”转换为 DataFrame:

with open('exchangeInfo.json', 'r') as fp:
    exchangeInfo = json.load(fp)


symbolsDF = pd.DataFrame(client.get_exchange_info(['symbols'])

我想将“过滤器”列从“符号”转换为这样的列

"symbols": [
    {
      "symbol": "ETHBTC",
      "status": "TRADING",
      "baseAsset": "ETH",
      "baseAssetPrecision": 8,
      "quoteAsset": "BTC",
      "quotePrecision": 8,
      "quoteAssetPrecision": 8,
      "baseCommissionPrecision": 8,
      "quoteCommissionPrecision": 8,
      "minPrice": "0.00000100",
      "maxPrice": "100000.00000000",
      "tickSize": "0.00000100",
      "minQty": "0.00100000",
      "maxQty": "100000.00000000",
      "stepSize": "0.00100000"}]
    }

所以我的最终 DataFrame 将包含符号,列将是

["symbol", "status", "baseAsset", "baseAssetPrecision", "quoteAsset","quotePrecision", "quoteAssetPrecision", "baseCommissionPrecision", "quoteCommissionPrecision", "minPrice", "maxPrice", "tickSize", "minQty", "maxQty", "stepSize"]

谢谢

【问题讨论】:

    标签: python pandas dataframe binance


    【解决方案1】:

    试试:

    exchangeInfo = {
        "timezone": "UTC",
        "serverTime": 1565246363776,
        "rateLimits": [],
        "exchangeFilters": [],
        "symbols": [
            {
                "symbol": "ETHBTC",
                "status": "TRADING",
                "baseAsset": "ETH",
                "baseAssetPrecision": 8,
                "quoteAsset": "BTC",
                "quotePrecision": 8,
                "quoteAssetPrecision": 8,
                "baseCommissionPrecision": 8,
                "quoteCommissionPrecision": 8,
                "filters": [
                    {
                        "filterType": "PRICE_FILTER",
                        "minPrice": "0.00000100",
                        "maxPrice": "100000.00000000",
                        "tickSize": "0.00000100",
                    },
                    {
                        "filterType": "PERCENT_PRICE",
                        "multiplierUp": "1.3000",
                        "multiplierDown": "0.7000",
                        "avgPriceMins": 5,
                    },
                    {
                        "filterType": "LOT_SIZE",
                        "minQty": "0.00100000",
                        "maxQty": "100000.00000000",
                        "stepSize": "0.00100000",
                    },
                ],
            },
        ],
    }
    
    df = pd.json_normalize(exchangeInfo["symbols"])
    df = pd.concat(
        [
            df,
            df.pop("filters")
            .apply(lambda x: dict(i for d in x for i in d.items()))
            .apply(pd.Series),
        ],
        axis=1,
    ).drop(columns="filterType")
    print(df)
    

    打印:

       symbol   status baseAsset  baseAssetPrecision quoteAsset  quotePrecision  quoteAssetPrecision  baseCommissionPrecision  quoteCommissionPrecision    minPrice         maxPrice    tickSize multiplierUp multiplierDown  avgPriceMins      minQty           maxQty    stepSize
    0  ETHBTC  TRADING       ETH                   8        BTC               8                    8                        8                         8  0.00000100  100000.00000000  0.00000100       1.3000         0.7000             5  0.00100000  100000.00000000  0.00100000
    

    【讨论】:

    • 就是它!谢谢!
    • 但我还有一个问题。不是在我发布的示例中,而是在我的 Json 文件中,我有 5 个不同的过滤器,我怎样才能只使用名​​为“FilterType”的过滤器中的 3 个。我的 5 个过滤器是“PRICE_FILTER”、“PERCENT_PRICE”、“LOT_SIZE”、“ MIN_NOTIONAL”和“MARKET_LOT_SIZE”,我只想要“PRICE_FILTER”“LOT_SIZE”和“MIN_NOTIONAL”
    • @JMFisac 为了不弄乱评论部分,我建议在 StackOverflow 上打开新问题。我会试着看看它。
    • 完美!我会做的
    猜你喜欢
    • 2016-06-26
    • 2019-10-20
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2018-12-13
    • 2021-12-13
    • 2020-03-22
    相关资源
    最近更新 更多