gpt4 book ai didi

python - 如何在整个 Pandas 列上应用 json_normalize

转载 作者:行者123 更新时间:2023-12-03 16:22:52 25 4
gpt4 key购买 nike

我有一个带有 LISTS(with dicts) 作为列值的数据框。我的目的是规范整列(所有行)。我找到了标准化单行的方法。但是,我无法对整个数据框或列应用相同的功能。

data = {'COLUMN': [ [{'name': 'WAG 01', 'id': '105F', 'state': 'available', 'nodes': 3,'volumes': [{'state': 'available', 'id': '330172', 'name': 'q_-4144d4e'}, {'state': 'available', 'id': '275192', 'name': 'p_3089d821ae', }]}], [{'name': 'FEC 01', 'id': '382E', 'state': 'available', 'nodes': 4,'volumes': [{'state': 'unavailable', 'id': '830172', 'name': 'w_-4144d4e'}, {'state': 'unavailable', 'id': '223192', 'name': 'g_3089d821ae', }]}], [{'name': 'ASD 01', 'id': '303F', 'state': 'available', 'nodes': 6,'volumes': [{'state': 'unavailable', 'id': '930172', 'name': 'e_-4144d4e'}, {'state': 'unavailable', 'id': '245192', 'name': 'h_3089d821ae', }]}] ] }

source_df = pd.DataFrame(data)

source_df looks like below :



enter image description here

根据 https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html我设法获得了一行的输出。

Code to apply for one row:


Target_df = json_normalize(source_df['COLUMN'][0], 'volumes', ['name','id','state','nodes'], record_prefix='volume_')

Output for above code :



enter image description here

我想知道我们如何为整个列实现所需的输出

Expected output:



enter image description here

编辑:
@lostCode ,下面是带有 nan 和空列表的输入

enter image description here

最佳答案

你可以做:

Target_df=pd.concat([json_normalize(source_df['COLUMN'][key], 'volumes', ['name','id','state','nodes'], record_prefix='volume_') for key in source_df.index]).reset_index(drop=True)

输出:
    volume_state    volume_id   volume_name  name   id     state     nodes
0 available 330172 q_-4144d4e WAG 01 105F available 3
1 available 275192 p_3089d821ae WAG 01 105F available 3
2 unavailable 830172 w_-4144d4e FEC 01 382E available 4
3 unavailable 223192 g_3089d821ae FEC 01 382E available 4
4 unavailable 930172 e_-4144d4e ASD 01 303F available 6
5 unavailable 245192 h_3089d821ae ASD 01 303F available 6
concat , 用于连接数据帧列表,在这种情况下,使用 json_normalize 生成的列表将连接到 source_df 的所有行上

您可以使用检查 source_df 的类型:
Target_df=pd.concat([json_normalize(source_df['COLUMN'][key], 'volumes', ['name','id','state','nodes'], record_prefix='volume_') for key in source_df.index if isinstance(source_df['COLUMN'][key],list)]).reset_index(drop=True)

关于python - 如何在整个 Pandas 列上应用 json_normalize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57732095/

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