繁体   English   中英

有没有办法从列表中的字典创建 dataframe?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM