#python #pandas #dictionary
#питон #панды #словарь
Вопрос:
Преобразование фрейма данных в JSON или из словаря в JSON по какой-то причине не привело к успеху, независимо от того, какой параметр orient использовался (таблица или разделение, индекс или записи).
код:
dataf = pd.DataFrame(columns = ["Objects", "Col1", "Col2"])
dataf['Objects'] = ['Object1','Object2']
dataf['Col1']= ["1","2"]
dataf['Col2']= ["3","4"]
dataf.set_index('Objects', inplace = True)
# dataf converted to dict
dataf = dataf.to_dict(orient='index')
Мой вывод:
dataf
Out[199]: {'Object1': {'Col1': '1', 'Col2': '3'}, 'Object2': {'Col1': '2', 'Col2': '4'}}
Где ‘Object1’ и ‘Object2’ являются ключами, а соответствующие им значения {‘Col1’: ‘1’, ‘Col2’: ‘3’}, где Col1 — это ключ, ‘1’ — значение, а Col2 — ключ, 3 — значение
outp1 = json.dumps(данные)
outp1
Out[225]: '{"Object1": {"Col1": "1", "Col2": "3"}, "Object2": {"Col1": "2", "Col2": "4"}}'
Желаемый результат (отредактированный):
{
"Object1": [{
"Col1": "1",
"Col2": "3"
},
{
"Object2": [{
"Col1": "2",
"Col2": "4"
}],
}]
}
Если я не ввел синтаксис правильного JSON, вот ссылка на картинку: ссылка
Это формат, который я хочу получить при преобразовании его в JSON.
Комментарии:
1. Чтобы было ясно, вы говорите, что в качестве значения для
Object1
вам нужен список, содержащий словарь сCol1
иCol2
, а такжеObject3
и его столбцы?2. Откуда берется объект 3?
3. Я бы сказал, что это называется вложенным словарем, где Object1 и Object2 являются основными ключами, в которых есть «столбцы», и эти столбцы содержат информацию или их значения. Вывод описывает это, я полагаю?
4. «Ожидаемый / желаемый результат и добавлен дополнительный пример (псевдо): » это означает, что я просто продолжил пример того, как должен выглядеть результат. с приведенным выше кодом и фреймом данных только первый блок должен быть выведен именно таким образом, без дальнейшего примера Object3 и т. Д
5. Я все еще не совсем уверен, какова ваша цель, но позвольте мне привести вам пример. Допустим, вы хотите найти значение для
Col2
ofObject2
. С тем, как это сделали Pandas, вам просто нужно было бы сделатьoutput["Object2"]["Col2"]
. С тем, как вы пытаетесь это сделать, вам нужно будет сделатьoutput["Object1"][1]["Object2"][0]["Col2"]
. Как вы думаете, какой из них вам нужен?
Ответ №1:
Я рассмотрю несколько способов форматирования ваших данных и насколько они будут полезны.
- То, что вы изначально просили в своем вопросе:
{
"Object1": [{
"Col1": "1",
"Col2": "3"
},
{
"Object2": [{
"Col1": "2",
"Col2": "4"
}],
}]
}
Это на 100% неверно по причинам, которые я уже изложил в комментарии. Чтобы получить доступ Col2
к of Object2
, вам нужно будет сделать output["Object1"][1]["Object2"][0]["Col2"]
. Это не имеет абсолютно никакого смысла.
2.
{
"Object1": [{
"Col1": "1",
"Col2": "3"
}],
{
"Object2": [{
"Col1": "2",
"Col2": "4"
}],
}
}
Это немного лучше, но все равно не очень полезно. Теперь, чтобы получить доступ Col2
к of Object2
, вам нужно будет сделать output["Object2"][0]["Col2"]
. Какая польза от этого дополнительного [0]
в середине? Нет.
- Что вам дали Pandas
{
'Object1': {
'Col1': '1',
'Col2': '3'
},
'Object2': {
'Col1': '2',
'Col2': '4'
}
}
Это полезно. Теперь, чтобы получить доступ Col2
к of Object2
, вам просто нужно сделать output["Object2"]["Col2"]
. Это вполне приемлемый способ организации данных.
- О чем, я думаю, вы просите
{
'Objects': [
{
'name': 'Object1'
'Col1': '1',
'Col2': '3'
},
{
'name' : 'Object2'
'Col1': '2',
'Col2': '4'
}
]
}
Судя по ссылке, которую вы указали в комментариях, похоже, что это ваша цель. Объекты хранятся в виде списка, и каждый список содержит набор пар ключ / значение. Обратите внимание, что я преобразовал ObjectN
ключ в значение. Это связано с тем, что в списках нет пар ключ / значение.
- Более простая версия 4
[
{
'name': 'Object1'
'Col1': '1',
'Col2': '3'
},
{
'name' : 'Object2'
'Col1': '2',
'Col2': '4'
}
]
Это так же полезно, как 4, но проще в использовании. Вместо output['Objects'][1]['Col2']
этого вам сейчас просто нужно output[1]['Col2']
.
Итак, какой из них вы должны использовать?
Это зависит от того, что вы хотите сделать со своими данными. Если вы хотите иметь возможность легко перебирать объекты, то вам нужно 4/5. Это потому, что они полагаются на списки, а итерация — это именно то, для чего хороши списки. С другой стороны, если вы в основном хотите найти информацию для одного объекта, не беспокоясь о других объектах, тогда вам нужно 3. Словари созданы для перехода к определенным значениям.
Если вы хотите узнать, как преобразовать из 3 в 4 или 5, я рекомендую задать другой вопрос или попробовать сделать это самостоятельно. Это совсем не сложно!