gpt4 book ai didi

pandas - 标准化 Pandas 数据框中的一列

转载 作者:行者123 更新时间:2023-12-02 02:43:51 26 4
gpt4 key购买 nike

我可以使用此代码从 json 文件导入数据...

import requests
from pandas.io.json import json_normalize

url = "https://datameetgeobk.s3.amazonaws.com/image_list.json"

resp = requests.get(url=url)
df = json_normalize(resp.json()['Images'])
df.head()

但是“BlockDeviceMappings”列实际上是一个列表,每个项目都有 DeviceName 和 Ebs 参数,它们是字符串和字典。如何进一步规范我的数据框以将所有详细信息包含在单独的列中?

我的屏幕截图与答案中显示的不匹配。 Ebs 列(左起第二个)是一个字典。

enter image description here

最佳答案

import requests
from pandas.io.json import json_normalize

url = "https://datameetgeobk.s3.amazonaws.com/image_list.json"

resp = requests.get(url=url)
resp = resp.json()

到目前为止你所拥有的:
df = json_normalize(resp['Images'])

BlockDeviceMappings 强制转换为所有列
inner_keys = [x for x in resp['Images'][0].keys() if x != 'BlockDeviceMappings']

df_bdm = json_normalize(resp['Images'], record_path=['BlockDeviceMappings'], meta=inner_keys, errors='ignore')

分开 bdm_df :
bdm_df = json_normalize(resp['Images'], record_path=['BlockDeviceMappings'])

你一定会疑惑为什么df有 39995 个条目,而 bdm_df有 131691 个条目。这是因为 BlockDeviceMappingslistdicts不同长度:
bdm_len = [len(x) for x in df.BlockDeviceMappings]
max(bdm_len)
>>> 31

sample BlockDeviceMappings入口:
[{'DeviceName': '/dev/sda1',
'Ebs': {'DeleteOnTermination': True,
'SnapshotId': 'snap-0aac2591b85fe677e',
'VolumeSize': 80,
'VolumeType': 'gp2',
'Encrypted': False}},
{'DeviceName': 'xvdb',
'Ebs': {'DeleteOnTermination': True,
'SnapshotId': 'snap-0bd8d7828225924a7',
'VolumeSize': 80,
'VolumeType': 'gp2',
'Encrypted': False}}]
df_bdm.head()
enter image description here

关于pandas - 标准化 Pandas 数据框中的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57352371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com