Как я могу использовать несколько заявлений с пандами - PullRequest
0 голосов
/ 06 октября 2018

Я использую панды с Python для экспорта Excel в JSON.Это мой первый день с этой библиотекой и с python:)

Файл Excel: Мои данные Excel

или DataFrame:

     DATA1  NAME CLIENT  PHONE CLIENT  NAME BOSS  PHONE BOSS
0    123    JOHN         DOE           KING       KING

I 'я пытаюсь получить JSON следующим образом:

[
  {
    "DATA1": 123,
    "CLIENT": [
      {
        "NAME CLIENT": "John",
        "PHONE CLIENT": "Doe"
      }
    ],
    "BOSS": [
      {
        "NAME BOSS": "King",
        "PHONE BOSS": "King"
      }
    ]
  }
]

Когда я пытаюсь получить первый массив json без проблем, я использую это:

df.groupby(["DATA1"], as_index=False)
  .apply(lambda x: x[['NAME CLIENT', 'PHONE CLIENT']].to_dict('r'))
   .reset_index()
   .rename(columns={0: 'CLIENT'})
   .to_json(path_or_buf='output_path.json', orient='records'))

Но если япопытаться получить оба массива одновременно, это не работает ... Я пытаюсь выполнить несколько функций apply или agg, но это не работает, и я не знаю, где я должен использовать функцию dict:

 df.groupby(["DATA1"], as_index=False)
   .agg({'CLIENT' : lambda x: x[['NAME CLIENT', 'PHONE CLIENT']],
     'BOSS' : lambda x: x[['NAME BOSS', 'PHONE BOSS']]})
   .reset_index()
   .to_json(path_or_buf='output_path.json', orient='records'))

Если кто-то может помочь мне ... Спасибо всем :)

1 Ответ

0 голосов
/ 07 октября 2018

Вы можете использовать отдельную функцию для создания каждой записи, как вы хотите:

def f( df ):
    return { 'CLIENT': df[ ['NAME CLIENT', 'PHONE CLIENT'] ],
             'BOSS': df[ ['NAME BOSS', 'PHONE BOSS'] ], 
             'DATA1': df[ 'DATA1' ].values[0]
           }

df.groupby("DATA1", as_index=False).apply( f ).to_json(path_or_buf='output_path.json', orient='records')
...