Транспонировать CSV в JSON - PullRequest
2 голосов
/ 09 июля 2020

У меня есть CSV, подобный приведенному ниже, и я хотел транспонировать как JSON

Ввод:

Ожидаемый результат:

{
"C1" :[ {"header2" : "name1", "header 3" : "address 1"}, {"header2" : "name3", "header 3" : "address 3"}],
"C2" : [ {"header2" : "name2", "header 3" : "address 2"}]
}

1 Ответ

2 голосов
/ 10 июля 2020
  • Судя по некоторым комментариям, некоторые люди просто pandas ненавистники. Но мне нравится использовать инструмент, который позволяет мне решать проблему самым простым способом и с наименьшим количеством строк кода.
    • В данном случае, без сомнения, это pandas
    • Дополнительным преимуществом использования pandas является то, что данные могут быть легко очищены, проанализированы и визуализированы при необходимости.
    • Решения на Как преобразовать файл CSV в многострочный JSON? предлагает некоторые основы, но не поможет преобразовать CSV в требуемую форму.
  • Из-за ожидаемого вывода файла JSON это нетривиальный вопрос, который требует изменения формы / группировки данных в csv и легко решается с помощью pandas.DataFrame.groupby.
    • groupby 'h1', поскольку значения столбца будут dict внешними ключами
    • groupby возвращает объект DataFrameGroupBy, который можно разделить на, i, значение, используемое для создания группы ('c1' и 'c2' в данном случае) и связанной группы фреймов данных, g.
      • Используйте pandas.DataFrame.to_dict, чтобы преобразовать фрейм данных в список словарей.
import json
import pandas as pd

# read the file
df = pd.DataFrame('test.csv')

# display(df)
   h1  h2  h3
0  c1  n1  a1
1  c2  n2  a2
2  c1  n3  a3

# groupby and create dict
data_dict = dict()
for i, g in df.groupby('h1'):
    data_dict[i] = g.drop(columns=['h1']).to_dict(orient='records')

# print(data_dict)
{'c1': [{'h2': 'n1', 'h3': 'a1'}, {'h2': 'n3', 'h3': 'a3'}],
 'c2': [{'h2': 'n2', 'h3': 'a2'}]}

# save data_dict to a file as a JSON
with open('result.json', 'w') as fp:
    json.dump(data_dict, fp)

JSON файл

{
    "c1": [{
            "h2": "n1",
            "h3": "a1"
        }, {
            "h2": "n3",
            "h3": "a3"
        }
    ],
    "c2": [{
            "h2": "n2",
            "h3": "a2"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...