#python #json #pandas
Вопрос:
Возникли проблемы с преобразованием CSV-файла в JSON с массивом вложенных списков.
Ввод Csv:
Id,Name,Sub1,Sub2
1,A,Mathematics,English
2,B,Mathematics,Science
Вывод JSON:
{
"sources": [
{
"Id": 1,
"Name": "A",
"subjects": [
{
"Sub1": "Mathematics",
"Sub2": "English"
}
]
},
{
"Id": 2,
"Name": "B",
"subjects": [
{
"Sub1": "Mathematics",
"Sub2": "Science"
}
]
}
]
}
пробовал с панд, как показано ниже, но нужно его улучшить
import pandas as pd
csv_file = pd.DataFrame(pd.read_csv("/home/ubuntu/Proj/sample_2.csv", sep = ",", header = 0, index_col = False))
csv_file.to_json("/home/ubuntu/Proj/csvToJson_2.json", indent=4, orient = "records", date_format = "epoch", double_precision = 10, force_ascii = True, date_unit = "ms", default_handler = None)
Ответ №1:
Вы можете использовать DataFrame.apply()
функцию lambda для создания настраиваемого формата, а затем json.dump
записать его в файл json, как показано ниже:
csv_file = pd.read_csv("/home/ubuntu/Proj/sample_2.csv", sep = ",", header = 0, index_col = False)
json_out_list = csv_file.apply(lambda x: {"Id": x['Id'], "Name": x['Name'], "subjects": [{"Sub1": x['Sub1'], "Sub2": x['Sub2']}]}, axis=1).to_list()
json_result = {"sources": json_out_list}
import json
with open("/home/ubuntu/Proj/csvToJson_2.json", 'w') as f:
json.dump(json_result, f, indent=2)
Результат:
{
"sources": [
{
"Id": 1,
"Name": "A",
"subjects": [
{
"Sub1": "Mathematics",
"Sub2": "English"
}
]
},
{
"Id": 2,
"Name": "B",
"subjects": [
{
"Sub1": "Mathematics",
"Sub2": "Science"
}
]
}
]
}