将DataFrame的DataFrame转换为单个DataFrame只选择某些列Python



我有下一个Json文件:

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

但是,我只想选择其中的2个过滤器,根据filterType名称,我希望有";过滤器价格;以及";LOT_ SIZE";

只从"过滤器价格;以及";LOT_ SIZE";过滤器,尝试:

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()
if d["filterType"] in {"PRICE_FILTER", "LOT_SIZE"}
)
)
.apply(pd.Series),
],
axis=1,
).drop(columns="filterType")
print(df)

打印:

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

您需要列出您想要的过滤器,然后从列表中选择任何一个:

filters = ['PRICE_FILTER', 'LOT_SIZE']
df = df[df['filters'].str.isin('|'.join(filters))]

最新更新