python - 如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?
问题描述
我有以下带有 2 列的 pandas DataFrame:地址和事务。
Address Transactions
0 0x88aDa02f6fCE2F1A835567B4999D62a7ebb70367 [{'type': 'outflow', 'amount': '250,000 VSO'}, {'type': inflow, 'amount': 100,000}]
1 0x00979Bd14bD5Eb5c424c5478d3BF4b6E9212bA7d [{'type': 'inflow', 'amount': '9.1283802424254'}, {'type': inflow, 'amount': 100,000}]
2 0x5852346d9dC3d64d81dc82fdddd5Cc1211157cD5 [{'type': 'outflow', 'amount': '7,200 VSO'}, {'type': inflow, 'amount': 100,000}]
每个地址有多个事务,一个地址的所有事务都由一个列表表示,每个事务包含一个字典。
每个字典都有两个键和两个值:分别是类型和数量。
创建上表的代码如下:
df_dict = pd.DataFrame(dict_all_txs_all_addresses.items(), columns=['Address', 'Transactions'])
我想做的事:
我想创建一个看起来像这样的多索引(可能是不必要的?)表:
Address Type Amount
0 0x88aDa02f6fCE2F1A835567B4999D62a7ebb70367 outflow 250,000 VSO
inflow 100,000 VSO
1 0x00979Bd14bD5Eb5c424c5478d3BF4b6E9212bA7d inflow 330,000 VSO
inflow 150,000 VSO'
它在不同的行中显示每笔交易,同时只维护一个地址。请注意,此模型表有 3 列。
也许这可以使用 df.groupby() 而不是多索引 df 来解决?
下面是一个字典示例,便于阅读和操作:
dict_all_txs_all_addresses = {
"0x00979Bd14bD5Eb5c424c5478d3BF4b6E9212bA7d": [
{
"amount": "330,000 VSO",
"type": "inflow"
},
{
"amount": "150,000 VSO",
"type": "inflow"
}
],
"0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367": [
{
"amount": "250,000 VSO",
"type": "outflow"
},
{
"amount": "100,000 VSO",
"type": "inflow"
}
]
}
解决方案
我们可以pd.json_normalize
在这里使用来获得一个可行的整洁格式:
df = df.explode("Transactions", ignore_index=True)
df = pd.concat([df, pd.json_normalize(df.pop("Transactions"))], axis=1)
Address amount type
0 0x00979Bd14bD5Eb5c424c5478d3BF4b6E9212bA7d 330,000 VSO inflow
1 0x00979Bd14bD5Eb5c424c5478d3BF4b6E9212bA7d 150,000 VSO inflow
2 0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367 250,000 VSO outflow
3 0x88aDa02f6fCE2F1A833cd9B4999D62a7ebb70367 100,000 VSO inflow
推荐阅读
- android - RuntimeException : 宽度 (0) 和高度 (0) 不能 <= 0
- codeigniter-3 - Codeigniter:如何清理字符串?
- html - 有没有办法从我们嵌入的 YouTube 视频末尾隐藏“相关视频”?
- javascript - 想要在 JavaScript 中捕获事件
- java - 为什么 getSupportFragmentManager().findFragmentByTag(tag) 总是显示空值?
- unix - 是否可以使用 openssl 签署 xml 文档
- javascript - Nemid iframe 未在 php 中加载
- r - 是否有可能在 R 中创建概率定律?
- reactjs - React TypeScript:轮播:每 3 秒旋转一次图像
- python - 如何从字典中删除nan键?