如何展平这个数据框
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
我有一个由 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