Я пытаюсь преобразовать документы mongoDB в плоскую структуру данных pandas.
Пример структуры моей коллекции mongoDB:
data = collection.find_one({'ID':300})
print(data)
{'_id': "ObjectId('5cd932299f6b7d4c9b95af6c')",
'ID': 300,
'updated': 23424,
'data': [
{ 'meta': 8,
'data': [
{'value1': 1, 'value2': 2},
{'value1': 3, 'value2': 4}
]
},
{ 'meta': 9,
'data': [
{'value1': 5, 'value2': 6}
]
}
]
}
Когда я помещаю это в кадр данных панд, я получаю
df = pd.DataFrame(data)
print(df)
| _id | ID | updated | data
|
|--------------------------|-----|---------|------------------------ ---------------------------|
| 5cd936779f6b7d4c9b95af6d | 300 | 23424 | {'meta': 8, 'data': [{'value1': 1, 'value2': 2... |
| 5cd936779f6b7d4c9b95af6d | 300 | 23424 | {'meta': 9, 'data': [{'value1': 5, 'value2': 6}]} |
Когда я перебираю фрейм данных с помощью pd.concat, я получаю
df.rename(columns={'data':'data1'}, inplace=True)
df2 = pd.concat([df, pd.DataFrame(list(df['data1']))], axis=1).drop('data1', 1)
df3 = pd.concat([df2, pd.DataFrame(list(df2['data']))], axis=1).drop('data', 1)
print(df3)
| _id | ID | updated | meta | 0 | 1 |
|--------------------------|-----|---------|------|----------------------------|----------------------------|
| 5cd936779f6b7d4c9b95af6d | 300 | 23424 | 8 | {'value1': 1, 'value2': 2} | {'value1': 3, 'value2': 4} |
| 5cd936779f6b7d4c9b95af6d | 300 | 23424 | 9 | {'value1': 5, 'value2': 6} | None |
Объекты самого низкого уровня массива самого низкого уровня всегда имеют одинаковые имена.
Поэтому я хочу:
| ID | updated | meta | value1 | value2 |
|-----|---------|------|--------|--------|
| 300 | 23424 | 8 | 1 | 2 |
| 300 | 23424 | 8 | 3 | 4 |
| 300 | 23424 | 9 | 5 | 6 |
Я не на том пути?
Какой самый удобный способ решить эту проблему?