Search code examples
pythonpandasdataframebinance

DataFrame of DataFrames Python


I have this Json File,

{
  "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"}]
    }

I have transformed 'symbols' from the Json File into a DataFrame:

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


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

I would like to transform the column 'filters' from 'symbols' to columns like this

"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"}]
    }

So my final DataFrame will consist on symbols, and the columns will be

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

Thank You


Solution

  • Try:

    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)
    

    Prints:

       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