Конвертировать Dataframe в Json с вложенными массивами - PullRequest
0 голосов
/ 15 октября 2019

У меня есть кадр данных df, как показано ниже

   ID               Aisle            Residence        HomePhone        CellPhone
   ------------------------------------------------------------------------------
0  1245,3214        A1, A2, A3, A4   Home             NaN              888888888
1  5674             B2,B3            Cell             777777777        999999999

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

{
 "0":{
    {
      "column": "ID",
      "values": [
        "1245",
        "3214"
      ]
    },
    {
      "column": "Aisle",
      "values": [
        "A1",
        "A2",
        "A3",
        "A4"
      ]
    },
    {
      "column": "Residence",
      "values": [
        "Home"
      ]
    },
    {
      "column": "HomePhone",
      "values": []
    },
    {
      "column": "CellPhone",
      "values": [
        "888888888"
      ]
    }
   },
"1":{
    {
      "column": "ID",
      "values": [
        "5674"
      ]
    },
    {
      "column": "Aisle",
      "values": [
        "B2",
        "B3"
      ]
    },
    {
      "column": "Residence",
      "values": [
        "Cell"
      ]
    },
    {
      "column": "HomePhone",
      "values": [
        "777777777"
      ]
    },
    {
      "column": "CellPhone",
      "values": [
        "999999999"
      ]
    }
   },

У меня есть 2 строки, которые 0 и 1, иУ json есть информация для каждой строки. Поэтому я хочу добавить атрибуты и назначить их значениям, которые являются именами столбцов, например "column":"Aisle", "values":["A1","B1,...]"

Кроме того, у меня есть ограничение на то, что имена столбцов всегда меняются (ID, Проход,Место жительства ... и т. Д.) И количество столбцов различаются, поэтому я не могу жестко кодировать столбцы при преобразовании из DF в JSON.

1 Ответ

1 голос
/ 15 октября 2019

Я думаю, что это самое близкое к тому, что вы ищете. Использование DataFrame.to_json:

df2=df.copy()
df2[['ID','Aisle']]=df2[['ID','Aisle']].apply(lambda x: x.replace(' ','').str.split(','))
print(df2)

             ID                Aisle Residence    HomePhone  CellPhone
0  [1245, 3214]  [A1,  A2,  A3,  A4]      Home          NaN  888888888
1        [5674]             [B2, B3]      Cell  777777777.0  999999999

df2.T.to_json()

Вывод:

'{"0":{"ID":["1245","3214"],"Aisle":["A1"," A2"," A3"," A4"],"Residence":"Home","HomePhone":null,"CellPhone":888888888},"1":{"ID":["5674"],"Aisle":["B2","B3"],"Residence":"Cell","HomePhone":777777777.0,"CellPhone":999999999}}'

Вы также можете попробовать это:

def split_func(x):
    try:
        return x.replace(' ','').str.split(',') 
    except:
        return x
df2=df2.apply(split_func)

, но имейте в виду, что все ячейки типа str будут преобразованы в список

df2.T.to_json()

'{"0":{"ID":["1245","3214"],"Aisle":["A1","A2","A3","A4"],"Residence":["Home"],"HomePhone":null,"CellPhone":888888888},"1":{"ID":["5674"],"Aisle":["B2","B3"],"Residence":["Cell"],"HomePhone":777777777.0,"CellPhone":999999999}}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...