#python #json #pandas #dataframe
#python #json #pandas #фрейм данных
Вопрос:
У меня есть фрейм данных Pandas:
nodes x y z
0 1 0.0000 0.000 0.0000
1 2 0.0000 9.144 0.0000
2 3 19.5072 0.000 0.0000
3 4 19.5072 9.144 0.0000
4 5 9.7536 0.000 0.0000
.. ... ... ... ...
175 176 19.5072 9.144 27.7368
176 177 19.5072 9.144 25.7556
177 178 19.5072 9.144 21.7932
178 179 19.5072 9.144 19.8120
179 180 19.5072 9.144 17.8308
для преобразования в JSON:
{
"nodes": {
"1": {
"x": 0,
"y": 0,
"z": 0
},
"2": {
"x": 0,
"y": 9.144,
"z": 0
},
"3": {
"x": 19.5072,
"y": 0,
"z": 0
},
"4": {
"x": 19.5072,
"y": 9.144,
"z": 0
},
"5": {
"x": 9.7536,
"y": 0,
"z": 0
},
},
}
Я только начал использовать python. После Google я попытался:
out = df.to_json(orient = 'records')
print(json.dumps(json.loads(out), indent=4))
Это привело к:
{
"nodes": 1,
"x": 0.0,
"y": 0.0,
"z": 0.0
},
{
"nodes": 2,
"x": 0.0,
"y": 9.144,
"z": 0.0
},
{
"nodes": 3,
"x": 19.5072,
"y": 0.0,
"z": 0.0
},
Пожалуйста, помогите. Спасибо.
Ответ №1:
Вы можете воспользоваться этой groupby
функцией для достижения желаемого результата:
out = {'nodes': df.groupby('nodes').last().to_dict(orient='index')}
print(json.dumps(out, indent=4))
Результаты в:
{
"nodes": {
"1": {
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"2": {
"x": 0.0,
"y": 9.144,
"z": 0.0
},
"3": {
"x": 19.5072,
"y": 0.0,
"z": 0.0
},
"4": {
"x": 19.5072,
"y": 9.144,
"z": 0.0
},
"5": {
"x": 9.7536,
"y": 0.0,
"z": 0.0
}
}
}
Комментарии:
1. @ drec4s. Это работает. Спасибо. Не могли бы вы рассказать о функции
.last()
?2.
out = {'nodes': df.groupby('nodes').last().to_dict(orient='index')}
сработало; в противном случае вы получите предупреждениеFutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.