Как преобразовать две колонки Excel в JSON с Python? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть файл Excel, похожий на этот:

name   gender   fac1(radio)   fac2(tv)   fac3(cycle)   fac4(bike)   hasCard   cardNo
a1     f         y              y           n             y          n         
a2     m         n              n           y             n          y         AHJS5684

Как мне получить структуру, подобную приведенной ниже, из файла xls выше

"name": "a1",
"gender": "f",
"facilities": ["radio", "tv", "bike"],
"card": {
   "exists": "n"
   "cardNo": ""
}

Я только что прочитал файл Excelпока в моем коде:

import pandas as pd
#reading excel
df = pd.read_excel("C:\\Users\\Desktop\\Culture\\Artist_Data\\EZCC\\Madur.xlsx")
new_df = df.assign(facilities = df.filter(like = 'fac').apply(lambda x: x.str.lower().dropna().tolist(), axis=1))
d = df.to_dict('records')

Приведенный выше код не дает желаемых результатов вообще.

1 Ответ

0 голосов
/ 05 марта 2019

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"
    }
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...