【发布时间】:2021-11-20 11:50:01
【问题描述】:
我有由 ID 和一列组成的数据框。该列在每个单元格中都有字典列表。我想要的是对其进行规范化和展平,因此我将拥有许多从这些字典中出现的列,而不是一列。
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 的原因是使用 index = 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
【问题讨论】:
-
df = pd.json_normalize(load_only_df['LoadNodes'])的输出是什么?NaNs 的原因是使用index = load_only_df.index,如果删除它,输出是什么? -
我在帖子中添加了编辑。
-
如果您提供一个创建要重塑的结构的数据框的最小示例,也会更容易。至于解决方案,pandas.pydata.org/pandas-docs/stable/reference/api/… 做你需要的吗?
标签: python pandas dataframe nested flatten