Nested JSON e Pandas Normalize

votos
1

Eu tenho alguns dados JSON retornado como a seguir: (Eu não posso mudar a estrutura)

[
  {
    id: d6aca8ac,
    owner: test,
    sections: {
      summary: {
        id: d417cd0e,
        notes: ,
        created_at: 2018-11-26T19:02:06Z
      },
      weather: {
        id: 7ef34660,
        notes: 
      },
      task: {
        id: 255d86dc,
        tasks: [
          {
            id: t1,
            total_hours: 176.0,
            updated_at: 2018-11-26T19:02:06Z,
            created_at: 2018-11-26T19:02:06Z
          },
          {
            id: t2,
            total_hours: 176.0,
            updated_at: 2018-11-26T19:02:06Z,
            created_at: 2018-11-26T19:02:06Z
          }
        ]
      }
    }
  }
]

Eu estou tentando usar json_normalise de pandas para obter as tarefas em uma trama de dados como este:

+----+-------------+----------------------+----------------------+
| id | total_hours |      updated_at      |      created_at      |
+----+-------------+----------------------+----------------------+
| t1 |         176 | 2018-11-26T19:02:06Z | 2018-11-26T19:02:06Z |
| t2 |         176 | 2018-11-26T19:02:06Z | 2018-11-26T19:02:06Z |
+----+-------------+----------------------+----------------------+

Eu tenho um script que itera sobre centenas de arquivos JSON em uma pasta aplicação de um caminho de gravação diferentes, dependendo do nome do arquivo e isso funciona para todos eles, exceto este estrutura para que eu realmente gostaria de ver se eu posso obter este resultado usando algo semelhante ( isso não funciona, obviamente):

normalised_data = json_normalize(data=json_data, record_path=['sections', 'task', 'tasks'], meta=['id'], meta_prefix='parent_' , errors='ignore')

Se esse estilo de comando não pode ser usado, em seguida, que seria a minha melhor opção? Então eu vou ter que pensar em separar este arquivo em particular.

Obrigado,

Publicado 27/11/2018 em 18:09
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Por não usar uma lista aninhada para o seu record_path, todos os seguintes caminhos estão realmente tentando indexar as chaves devolvidas pelo primeiro caminho, que são strings, então eu estou supondo que você está recebendo um TypeError.

Você deve definir o caminho inteiro em sua própria sub-lista:

pd.io.json.json_normalize(json_data, record_path=[['sections', 'task', 'tasks']])

             created_at  id  total_hours            updated_at
0  2018-11-26T19:02:06Z  t1        176.0  2018-11-26T19:02:06Z
1  2018-11-26T19:02:06Z  t2        176.0  2018-11-26T19:02:06Z
Respondeu 27/11/2018 em 18:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more