python - 将 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 名称,我想要“PRICE_FILTER”和“LOT_SIZE”
解决方案
要仅从“PRICE_FILTER”和“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
推荐阅读
- xpages - 如何禁用 xe:dashboard 和 xe:carousel 控件的“仪表板”和“轮播”默认工具提示?
- angular - 以角度格式化日期对象,如何
- node.js - 如何从角度在 socket.emit 中添加回调(new Ack())
- electron - 即使 `nodeIntegration` 设置为 `false`,Electron 也允许在渲染器中使用 `require('path')`
- php - 解决 Laravel InvalidArgumentException: Authentication views not found
- django - 使用 django 和 drf-yasg 重用序列化程序的问题
- r - 在不同的数据帧中保持相同的 id
- python - 网页抓取数据表到excel
- python - 在没有 SASpy 和 jaydebeapi 的情况下使用 SAS
- javascript - axios 和 express 路由器没有预期错误