![](/img/trans.png)
[英]Is there a way to create a dataframe from a dictionary with list of values?
[英]Is there a way to create a dataframe from a Dictionary inside a list?
我有一个名为 layout 的 dataframe ,它有一个名为 layout(是同名)的列,其中包含这样的嵌套数据。
[{'floors': [{'floor_id': 1024,
'floor_name': 'Apartment',
'rooms': [{'devices': [1017,
1021,
1032,
1038,
1041,
1048,
1052,
1060,
1016,
1062,
1069,
1048],
'room_id': 1025,
'room_name': 'Living room'},
{'devices': [1018,
1022,
1037,
1047,
1067,
1070,
1073,
1079,
1080,
1081,
1041,
1045,
1047],
'room_id': 1026,
'room_name': 'Kitchen'},
{'devices': [1034,
1036,
1046,
1050,
1049,
1055,
1071,
1074,
1076,
1044,
1046],
'room_id': 1027,
'room_name': 'Bathroom'},
{'devices': [1023, 1033, 1045, 1054, 1075, 1042],
'room_id': 1028,
'room_name': 'Bedroom 1'},
{'devices': [1020, 1051, 1053, 1066, 1068, 1077, 1078, 1043],
'room_id': 1029,
'room_name': 'Bedroom 2'}]},
{'floor_id': 1021,
'floor_name': 'First',
'rooms': [{'room_id': 1023, 'room_name': 'Kitchen', 'devices': [1019]},
{'room_id': 1024, 'room_name': 'Beedroom', 'devices': [1030]},
{'room_id': 1025, 'room_name': 'Store', 'devices': [1035]}]},
{'floor_id': 1026,
'floor_name': 'Ground',
'rooms': [{'room_id': 1027, 'room_name': 'Hall', 'devices': [1032, 1033]},
{'room_id': 1028, 'room_name': 'Gallery', 'devices': [1022, 1034]}]}]}]
有没有办法把它放在一个 dataframe 中? 我希望像 floor_id 和 floor_name 值应该对所有行通用。 我遇到的问题是处理关键的“房间”。 我希望 dataframe 直接有一个名为 devices 的列(在房间内),并在设备中包含数字作为行。 然后最后一列将是 room_id 和 room_name
floor_id | 楼层名称 | 设备 | room_id | 房间名 |
---|---|---|---|---|
1024 | 公寓 | 1017 | 1025 | 客厅 |
1024 | 公寓 | 1021 | 1025 | 客厅 |
1024 | 公寓 | 1032 | 1025 | 客厅 |
………… | ||||
1024 | 公寓 | 1068 | 1029 | 卧室 2 |
1024 | 公寓 | 1077 | 1029 | 卧室 2 |
1024 | 公寓 | 1078 | 1029 | 卧室 2 |
1024 | 公寓 | 1043 | 1029 | 卧室 2 |
我尝试使用
pd.DataFrame(layout.iloc[0]['layout'])
但我明白了
楼层 0 [{'floor_id': 1024, 'floor_name': '公寓',...
您应该将嵌套字典分解为具有理解的平面字典:
data = layout.iloc[0]['layout']
df = pd.DataFrame([{'floor_id': floor['floor_id'], 'floor_name': floor['floor_name'],
'devices': device, 'room_id': room['room_id'],
'room_name': room['room_name']} for floor in data[0]['floors']
for room in floor['rooms'] for device in room['devices']])
它按预期给出:
floor_id floor_name devices room_id room_name
0 1024 Apartment 1017 1025 Living room
1 1024 Apartment 1021 1025 Living room
2 1024 Apartment 1032 1025 Living room
3 1024 Apartment 1038 1025 Living room
4 1024 Apartment 1041 1025 Living room
5 1024 Apartment 1048 1025 Living room
6 1024 Apartment 1052 1025 Living room
7 1024 Apartment 1060 1025 Living room
8 1024 Apartment 1016 1025 Living room
9 1024 Apartment 1062 1025 Living room
10 1024 Apartment 1069 1025 Living room
11 1024 Apartment 1048 1025 Living room
12 1024 Apartment 1018 1026 Kitchen
13 1024 Apartment 1022 1026 Kitchen
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.