Dataframe для json с вложенными массивами с запятыми - PullRequest
0 голосов
/ 14 октября 2019

Я новичок в Python, поэтому мне нужна помощь с этим. У меня есть фрейм данных df, как показано ниже

ID               Aisle            Residence        HomePhone        CellPhone
-------------------------------------------------------------------------------
1245,3214        A1, A2, A3, A4   Home             NaN              888888888
.........        ...........      ...              .......          .........

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

{
  {
   "maincolumn": "Zone1",
   "mainvalues": [
    {
      "column": "ID",
      "values": [
        "1245",
        "3214"
      ]
    },
    {
      "column": "Aisle",
      "values": [
        "A1",
        "A2",
        "A3",
        "A4"
      ]
    },
    {
      "column": "Residence",
      "values": [
        "Home"
      ]
    },
    {
      "column": "HomePhone",
      "values": []
    }
   ]
  },
  {
   "maincolumn": "Zone2",
   "mainvalues": [
   {
      "column": "CellPhone",
      "values": [
        "888888888"
      ]
    }
   ] 
  }
}

Итак, я хочу добавить атрибуты и присвоить их значениям, которые являются именами столбцов, напримеркак "column":"Aisle", "values":["A1","B1,...]"

maincolumn устанавливается на основе исходного номера столбца, поэтому, если исходное имя столбца является мобильным телефоном, оно перейдет в зону 2, в противном случае все остальное находится в зоне1 (как видно из json выше).

mainvalues - это массив с атрибутами в нем, которые соответствуют каждому столбцу в кадре данных

Кроме того, у меня есть ограничение, что имена столбцоввсегда меняются (column1, column2, column3), а количество столбцов меняется, поэтому я не могу жестко кодировать столбцы при преобразовании из DF в JSON.

Большое спасибо, я ценю вашу помощь

1 Ответ

0 голосов
/ 17 октября 2019

Вы можете выполнить итерацию по фрейму данных и затем добавить его в нужном формате.

import pandas as pd
import numpy as np
import json

df = pd.DataFrame([[[1245, 3214], ['A1', 'A2', 'A3', 'A4'], 'Home', np.nan, 8888888888], [[9999, 5555], ['A6', 'A7', 'A8', 'A9'], 'Apartment', np.nan, 2222222222]], columns=['ID', 'Aisle', 'Residence', 'HomePhone', 'CellPhone'])
df.replace({np.nan: None}, inplace=True)
outcome = []

for i, ser in df.iterrows():
    temp_dict = [{"maincolumn": "Zone1", "mainvalues": []}, {"maincolumn": "Zone2", "mainvalues": []}]
    for col_name, values in ser.iteritems():
        if "cell" in col_name.lower():
            temp_dict[1]['mainvalues'].append({'column': col_name, 'values': (lambda x: [v for v in x] if type(x) is list else [x])(values)})
        else:
            temp_dict[0]['mainvalues'].append({'column': col_name, 'values': (lambda x: [v for v in x] if type(x) is list else [x])(values)})
    outcome.extend(temp_dict)

outcome = json.dumps(outcome)
print(outcome)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...