有没有办法将包含嵌套dict列表的列转换为行?

2024-05-14 20:11:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandasdataframe,其中一列包含嵌套词典的列表

import pandas as pd
import numpy as np

df = pd.DataFrame({"Column_1" : [
                                 [{'PID': '03', 'Col_par': [{'PID': '01', 'mace': [{'all': 100, 'd_Loc': 'front'}]}]}],
                                np.nan,
                                [{'PID': '01', 'Col_par': [{'PID': '02', 'mace': [{'all': 100, 'd_Loc': 'driver side'}]}]}],
                                [{'PID': '01', 'Col_par': [{'PID': '11', 'mace': [{'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '14', 'mace': [{'all': 23, 'd_Loc': 'rear'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 0, 'd_Loc': 'rear'}]}]}, 
                                {'PID': '06', 'Col_par': [{'PID': '11', 'mace': [{'all': 0, 'd_Loc': 'front'}]},
                                                        {'PID': '01', 'mace': [{'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '14', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '10', 'mace': [{'all': 0, 'd_Loc': 'rear'}]}]}, 
                                {'PID': '14', 'Col_par': [{'PID': '11', 'mace': [{'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '01', 'mace': [{'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 25, 'd_Loc': 'rear'}, 
                                                                                {'all': 100, 'd_Loc': 'front'}]}, 
                                                        {'PID': '10', 'mace': [{'all': 100, 'd_Loc': 'rear'}]}]}, 
                                {'PID': '11', 'Col_par': [{'PID': '01', 'mace': [{'all': 100, 'd_Loc': 'front'}]}, 
                                                        {'PID': '14', 'mace': [{'all': 53, 'd_Loc': 'rear'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 0, 'd_Loc': 'rear'}]}]}, 
                                {'PID': '10', 'Col_par': [{'PID': '14', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}]}],
                                [{'PID': '03', 'Col_par': [{'PID': '01', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '09', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}]}, 
                                {'PID': '06', 'Col_par': [{'PID': '01', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '03', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '09', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}]}, 
                                {'PID': '08', 'Col_par': [{'PID': '01', 'mace': [{'all': 100, 'd_Loc': 'rear'}, 
                                                                                {'all': 100, 'd_Loc': 'front'}]}, 
                                                        {'PID': '03', 'mace': [{'all': 100, 'd_Loc': 'rear'}, 
                                                                                {'all': 100, 'd_Loc': 'front'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 100, 'd_Loc': 'rear'}, 
                                                                                {'all': 100, 'd_Loc': 'front'}]}, 
                                                        {'PID': '09', 'mace': [{'all': 100, 'd_Loc': 'rear'}, 
                                                                                {'all': 100, 'd_Loc': 'front'}]}]}, 
                                {'PID': '09', 'Col_par': [{'PID': '01', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '03', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}]}, 
                                {'PID': '01', 'Col_par': [{'PID': '03', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '06', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}, 
                                                        {'PID': '09', 'mace': [{'all': 0, 'd_Loc': 'rear'}, 
                                                                                {'all': 0, 'd_Loc': 'front'}]}]}]],
                   "Key" : [1, 2, 3, 4, 5],
                   "Val_1": [25, 46, 75, 85, 89]})

数据:

    Column_1                                          Key Val_1
0   [{'PID': '03', 'Col_par': [{'PID': '01', 'mace...   1    25
1   NaN                                                 2    46
2   [{'PID': '01', 'Col_par': [{'PID': '02', 'mace...   3    75
3   [{'PID': '01', 'Col_par': [{'PID': '11', 'mace...   4    85
4   [{'PID': '03', 'Col_par': [{'PID': '01', 'mace...   5    89

我想提取嵌套字典中的值,并将嵌套字典列表转换为rows

PID_Val,  Col_par_PID,  PID_mace_all,  PID_d_loc,  Key,  Val1
'03',            '01',           100,    'front',    1,    25
np.nan,        np.nan,        np.nan,     np.nan,    2,    46
'01',            '02',           100,'driver side',  3,    75
'01',            '11',             0,    'front',    4,    85
'01',            '14',            23,     'rear',    4,    85
'01',            '06',             0,     'rear',    4,    85
'06',            '11',             0,    'front',    4,    85
'06',            '01',             0,    'front',    4,    85
'06',            '14',             0,     'rear',    4,    85

  # And soooo on

如何将嵌套字典的列转换为行


Tags: keyimport列表字典npcolvalnan
1条回答
网友
1楼 · 发布于 2024-05-14 20:11:26

尝试:

df = df[['Key', 'Val_1']].join(df['Column_1'].explode().apply(pd.Series)[['Col_par', 'PID']])
df.rename(columns={'PID':'PID_Val'}, inplace=True)
df = df[['Key', 'Val_1', 'PID_Val']].join(df['Col_par'].explode().apply(pd.Series)[['PID', 'mace']])
df.rename(columns={'PID': 'Col_par_PID'}, inplace=True)
df = df[['Key', 'Val_1', 'PID_Val', 'Col_par_PID']].join(df['mace'].explode().apply(pd.Series)[['all', 'd_Loc']])
df.rename(columns={'all': 'PID_mace_all', 'd_Loc': 'PID_d_loc'}, inplace=True)
df = df[['PID_Val', 'Col_par_PID', 'PID_mace_all', 'PID_d_loc', 'Key', 'Val_1']]

输出:

   PID_Val Col_par_PID  PID_mace_all    PID_d_loc  Key  Val_1
0       03          01         100.0        front    1     25
1      NaN         NaN           NaN          NaN    2     46
2       01          02         100.0  driver side    3     75
3       01          11           0.0        front    4     85
3       01          11          23.0         rear    4     85
..     ...         ...           ...          ...  ...    ...
4       01          09           0.0        front    5     89
4       01          09           0.0         rear    5     89
4       01          09           0.0        front    5     89
4       01          09           0.0         rear    5     89
4       01          09           0.0        front    5     89

相关问题 更多 >

    热门问题