#python #json #pandas #nested
#python #json #pandas #вложенный
Вопрос:
У меня есть фрейм данных Pandas, созданный из файла CSV, я хочу преобразовать его в пользовательский вложенный JSON
df = pd.read_csv("/content/analog.csv", sep=",")
Фрейм данных похож:
datetime key1 key2 key3 col1 col2 col3 ... col100
2020-08-27T02:28:00Z WECP001 27001 con0000 1001 1002 1003 ... 1005
2020-08-27T02:28:01Z WECP001 27001 con0000 11 22 33 ... 99
Я хочу преобразовать этот df во вложенный json, например:
[
{
"datetime":"2020-08-27T02:28:00Z"
"key1:"WECP001"
"key2:"27001"
"key3":"con0000"
"DATA":{
"col1":1001,
"col2":1002,
"col3":1003,
...
"col100":1005
}
},
{
"datetime":"2020-08-27T02:28:01Z"
"key1:"WECP001"
"key2:"27001"
"key3":"con0000"
"DATA":{
"col1":11,
"col2":22,
"col3":33,
...
"col100":99
}
}
]
вот код, который я устал, но я получаю неправильный результат
cols = df.columns.difference(['datetime','key1','key2','key3'])
j = (df.groupby(['datetime','key1','key2','key3'])[cols]
.apply(lambda x: x.to_dict('r'))
.reset_index(name='DATA')
.to_json(orient='records'))
print (j)
вывод выглядит так:
{
"datetime":"2020-08-27T02:28:00Z"
"key1:"WECP001"
"key2:"27001"
"key3":"con0000"
"DATA":[{
"col1":1001,
"col2":1002,
"col3":1003,
...
"col100
}]
проблема с моим кодом в том, что часть «ДАННЫЕ» стала списком, а не словарем
спасибо за помощь
Комментарии:
1. Не могли бы вы поделиться тем, что вы пробовали до сих пор? Дело в том, что мы все здесь, чтобы помочь, но мы хотели бы видеть любые усилия. Похоже, вы хотели бы, чтобы мы реализовали это для вас…
2. извини, друг, как ты сказал, я должен показать свою работу, позволь мне добавить свой код.
Ответ №1:
Попробуйте это
df2 = df.iloc[:, :4]
df2['Data'] = df[[f'col{i}' for i in range(1, 4)]].to_dict(orient='records')
print(df2.to_json(orient='records'))
Вывод:
[
{
"datetime": "2020-08-27T02:28:00Z",
"key1": "WECP001",
"key2": 27001,
"key3": "con0000",
"Data": {
"col1": 1001,
"col2": 1002,
"col3": 1003
}
},
{
"datetime": "2020-08-27T02:28:01Z",
"key1": "WECP001",
"key2": 27001,
"key3": "con0000",
"Data": {
"col1": 11,
"col2": 22,
"col3": 33
}
}
]
Комментарии:
1.спасибо, я понял вашу идею. основываясь на вашей идее, я попробовал это:
df2 = df.iloc[:, :4]
df2['DATA'] = df.iloc[:, 5:].to_dict(orient='records')
print(df2.to_json(orient='records'))
и я получаю свой ответ
Ответ №2:
import pandas as pd
df = pd.read_csv("***abc.csv", sep=",")
df2 = df.iloc[:, :4]
df2['DATA'] = df.iloc[:, 5:].to_dict(orient='records')
print(df2.to_json(orient='records', lines=True))
Результат:
{
"datetime":"2020-08-27T02:28:00Z"
"key1:"WECP001"
"key2:"27001"
"key3":"con0000"
"DATA":{
"col1":1001,
"col2":1002,
"col3":1003,
...
"col100":
}
}
{....}
{....}