#python #json
Вопрос:
У меня есть этот файл json:
print(data)
{'entityId': 'clusterId123',
'displayName': 'dev_cluster',
'firstSeenTms': 1584113406351,
'lastSeenTms': 1627524312116,
'properties': {'detectedName': 'dev_cluster'},
'tags': [],
'icon': {'primaryIconType': 'hypervisor'},
'toRelationships': {
'isMemberOf': [
{'id': 'HYPERVISOR_123', 'type': 'HYPERVISOR'},
{'id': 'HYPERVISOR_234', 'type': 'HYPERVISOR'},
{'id': 'HYPERVISOR_345', 'type': 'HYPERVISOR'}
]
}
}
Мне нужно создать фрейм данных, который выглядит следующим образом:
clusterId, clusterName, hypervisorId
clusterId123 dev_cluster HYPERVISOR_123
clusterId123 dev_cluster HYPERVISOR_234
clusterId123 dev_cluster HYPERVISOR_345
как вы можете видеть, идентификатор кластера и имя кластера повторяются, но идентификатор гипервизора изменяется так же, как в файле данных.
Я делаю это:
#create an empty list
`cluList=[]`
#apend elements to the list
`cluList.append([data['entityId'], data['displayName']])`
Я не знаю, как извлечь ГИПЕРВИЗОР_123, ГИПЕРВИЗОР_234, ГИПЕРВИЗОР_345 из этих наборов данных. Любые рекомендации приветствуются.
Комментарии:
1. Это не JSON, это просто словарь Python
Ответ №1:
Используйте понимание под диктовку:
import pandas as pd
data = {'entityId': 'clusterId123',
'displayName': 'dev_cluster',
'firstSeenTms': 1584113406351,
'lastSeenTms': 1627524312116,
'properties': {'detectedName': 'dev_cluster'},
'tags': [],
'icon': {'primaryIconType': 'hypervisor'},
'toRelationships': {
'isMemberOf': [
{'id': 'HYPERVISOR_123', 'type': 'HYPERVISOR'},
{'id': 'HYPERVISOR_234', 'type': 'HYPERVISOR'},
{'id': 'HYPERVISOR_345', 'type': 'HYPERVISOR'}
]
}
}
df = pd.DataFrame({
"clusterId": data["entityId"],
"clusterName": data["displayName"],
"hypervisorId": _id["id"]
} for _id in data["toRelationships"]["isMemberOf"])
df
И результат:
clusterId clusterName hypervisorId
0 clusterId123 dev_cluster HYPERVISOR_123
1 clusterId123 dev_cluster HYPERVISOR_234
2 clusterId123 dev_cluster HYPERVISOR_345
Комментарии:
1. спасибо вам за ответ. Быстрый вопрос: если бы у меня был цикл, куча файлов данных, нужно ли мне добавлять их в пустой фрейм данных?
2. @user1471980 файлы данных? Не могли бы вы быть более конкретными?
Ответ №2:
Вы можете использовать понимание списка, которое зацикливается на isMemberOf
списке.
clulist = [(data['entityId'], data['displayName'], hypid)
for hypid in data['toRelationships']['isMemberOf']
]
Комментарии:
1. clulist будет списком типов? могу ли я сделать это для преобразования во фрейм данных (cluEntitydf=pd.DataFrame(cluList))?
2. Да, вы должны быть в состоянии это сделать.