如何展平这个数据框

How to flatten this Dataframe

我有一个由 ID 和一列组成的 Dataframe。该列在每个单元格中都有字典列表。我想要的是对其进行规范化并展平,因此我将拥有这些字典中出现的许多列,而不是只有一列。

                                            LoadNodes
SubProjectId    
56409   [{'Id': 2, 'Description': None, 'Name': None, ...
56410   [{'Id': 2, 'Description': None, 'Name': None, ...
56411   [{'Id': 2, 'Description': None, 'Name': None, ...
56412   [{'Id': 2, 'Description': None, 'Name': None, ...
56414   [{'Id': 3, 'Description': None, 'Name': None, ...
... ...
56505   [{'Id': 2, 'Description': None, 'Name': None, ...
56506   [{'Id': 2, 'Description': None, 'Name': None, ...
56507   [{'Id': 2, 'Description': None, 'Name': None, ...
56508   [{'Id': 2, 'Description': None, 'Name': None, ...
56509   [{'Id': 2, 'Description': None, 'Name': None, ...
87 rows × 1 columns

Dataframe 看起来像那样,我想要的不是 LoadNodes 列,而是 Id、Description、Name 等列。当我使用此命令时:

pd.DataFrame(pd.json_normalize(load_only_df['LoadNodes']), index = load_only_df.index)

我收到以下输出...

    0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45
SubProjectId                                                                                                                                                                                        
56409   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56410   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56411   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56412   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56414   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
56505   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56506   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56507   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56508   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
56509   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
87 rows × 46 columns

编辑 1: “df = pd.json_normalize(load_only_df['LoadNodes']) 的输出是什么?NaN 的原因是使用索引 = load_only_df.index,如果删除它,输出是什么?- 耶斯瑞尔 1 分钟前

这是您发布的命令的输出。

0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45
0   {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
1   {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
2   {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
3   {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
4   {'Id': 3, 'Description': None, 'Name': None, '...   {'Id': 4, 'Description': None, 'Name': None, '...   {'Id': 5, 'Description': None, 'Name': None, '...   {'Id': 6, 'Description': None, 'Name': None, '...   {'Id': 7, 'Description': None, 'Name': None, '...   {'Id': 8, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
82  {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
83  {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
84  {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
85  {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
86  {'Id': 2, 'Description': None, 'Name': None, '...   None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None    None
87 rows × 46 columns

IIUC 使用 Series.explode:

df = pd.json_normalize(load_only_df['LoadNodes'].explode())

如果索引值也很重要,这里SubProjectId使用:

load_only_df = pd.DataFrame({'LoadNodes':[[{'Id': 2, 'Description': None, 'Name': None},
                                 {'Id': 7, 'Description': None, 'Name': None},
                                 {'Id': 8, 'Description': None, 'Name': None}],
                                [{'Id': 20, 'Description': None, 'Name': None},
                                 {'Id': 71, 'Description': None, 'Name': None},
                                 {'Id': 80, 'Description': None, 'Name': None}]]
                       }, index=[500, 123])


s = load_only_df['LoadNodes'].explode()
df = pd.json_normalize(s).set_index(s.index)
print(df)
     Id Description  Name
500   2        None  None
500   7        None  None
500   8        None  None
123  20        None  None
123  71        None  None
123  80        None  None