- Судя по некоторым комментариям, некоторые люди просто
pandas
ненавистники. Но мне нравится использовать инструмент, который позволяет мне решать проблему самым простым способом и с наименьшим количеством строк кода. - В данном случае, без сомнения, это
pandas
- Дополнительным преимуществом использования
pandas
является то, что данные могут быть легко очищены, проанализированы и визуализированы при необходимости. - Решения на Как преобразовать файл CSV в многострочный JSON? предлагает некоторые основы, но не поможет преобразовать CSV в требуемую форму.
- Из-за ожидаемого вывода файла
JSON
это нетривиальный вопрос, который требует изменения формы / группировки данных в csv и легко решается с помощью pandas.DataFrame.groupby
. groupby
'h1'
, поскольку значения столбца будут dict
внешними ключами groupby
возвращает объект DataFrameGroupBy
, который можно разделить на, i
, значение, используемое для создания группы ('c1'
и 'c2'
в данном случае) и связанной группы фреймов данных, g
.
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"
}
]
}