Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Cabeçalho de dataframe dinâmico

Estou fazendo um script em Python que deve baixar dados em JSON de uma API, transformá-lo em um dicionário nativo e registrar os dados em uma tabela. O caminho que estou seguindo é converter o JSON em um dataframe (com a biblioteca Pandas) e em seguida transfiro os dados do dataframe para um arquivo .xls. A quantidade de dados é bem grande, e acontece que algumas das chaves (cabeçalhos da tabela) que correspondem a esses dados variam, ou seja alguns dados tem (X, Y, Z), outros (X, Y, K) e outros (U, Y Z, K).

Desta forma, como faço para a cada informação que o script ler ele ir atualizando o cabeçalho para inserir itens novos se aparecerem? Vou colocar o link para a API que estou utilizando, as informações que quero utIlizar estão na chave ['data']. A extensão JSON-handle facilita muuuito a visualização dos dados no chrome.

http://api.metagenomics.anl.gov/search?biome=soil&limit=270

3 respostas
solução!

olá rodrigo, você pode usar a função merge() do pandas. veja um exemplo:

import pandas as pd

data1 = {'col1': 1, 'col2': 2}
data2 = {'col1': 3, 'col3': 4, 'col4': 5}

df1 = pd.DataFrame([data1])
df2 = pd.DataFrame([data2])

df3 = pd.merge(df1, df2, on='col1', how='outer')
print(df3)

sendo 'col1' uma coluna em comum entre os dois dataframes. e a saída será:

   col1   col2   col3   col4
0     1    2.0    NaN    NaN
1     3    NaN    4.0    5.0

espero ter ajudado e bons estudos!

Muito obrigado! Acabei chegando a essa conclusão depois, mas utilizando a função concat. Qual a diferença entre ela e a merge?

boa, Rodrigo! você também pode usar a concat(). A função merge() é semanticamente adequada para operações de estilo de banco de dados -- possui métodos de mesclagem de tabelas semelhantes aos de banco de dados relacionais (álgebra relacional). Ela também possui melhor desempenho do que a concat(). Você pode ler mais detalhes sobre isso na documentação do pandas: http://pandas.pydata.org/pandas-docs/stable/merging.html#merging