Pandas отлично подходит для обработки данных, а не для форматирования json.Но apply
может преобразовывать строки (или столбцы) кадра данных во что угодно, включая dict, а list
тривиально преобразует ряд панд в список.
Это означает, что требуемое преобразование может быть просто:
labels = {'fac1(radio)': 'radio', 'fac2(tv)': 'tv', 'fac3(cycle)': 'cycle',
'fac4(bike)': 'bike' }
d = list(df.fillna('').apply(lambda x: {
"name": x['name'],
"gender": x['gender'],
"facilities": [labels[i] for i in labels.keys() if x[i] == 'y'],
"card": {
"exists": x['hasCard'],
"cardNo": x['cardNo']
}}, axis=1))
Вы можете контролировать, что
print(json.dumps(d, indent=2))
дает, как и ожидалось:
[
{
"name": "a1",
"gender": "f",
"facilities": [
"radio",
"tv",
"bike"
],
"card": {
"exists": "n",
"cardNo": ""
}
},
{
"name": "a2",
"gender": "m",
"facilities": [
"cycle"
],
"card": {
"exists": "y",
"cardNo": "AHJS5684"
}
}
]