1
resposta

Popular um DataFrame

Tenho um código que termina da seguinte forma:

data = api.data(dataset_slug, table_name, filters)
    for row in data:
        print(row)

Como posso fazer para criar um DataFrame vazio e com o append o "for" ir populando o meu DataFrame? Tentei fazer da seguite forma mas não deu certo:

output = pd.DataFrame(data)
    output = output.append(data, ignore_index=True)
    print(output.head())

Será que poderiam me ajudar?

1 resposta

Oii Henrique, como você está? Espero que esteja bem ^-^

Tudo depende de como seus dados da variável data estão organizados, de como o conteúdo data está sendo retornado. Caso possa dar mais detalhes, consigo te ajudar de forma mais específica.

Mas fique tranquilo, vou deixar abaixo um exemplo geral.

Primeiramente temos que criar um dataframe que terá os nomes das colunas e após isso, podemos populá-lo:

import pandas as pd

df = pd.DataFrame(columns=['Nome coluna 1', 'Nome coluna 2', 'Nome coluna 3'])

De posse disso, podemos fazer um laço de repetição que irá popular esse DF. Veja um exemplo com o laço de repetição for:

for i in range(10):
  df.loc[i] = [f'Linha {i}', 4, 5]

No código acima, o df.loc na posição i serve para que possamos acessar uma linha do dataframe e no caso, essa linha terá o valor i, ou seja, o índice que está sendo percorrido no nosso for. Se fizermos um teste de mesa, teremos o seguinte:

df.loc[0] # pega a linha 0 do dataframe 
df.loc[1] # pega a linha 1 do dataframe 
df.loc[2] # pega a linha 2 do dataframe 
df.loc[3] # pega a linha 3 do dataframe 
df.loc[4] # pega a linha 4 do dataframe 

... continua 

Após capturarmos essa linha, apenas adicionamos os valores a ela. E esses valores terão de ser passados em forma de lista. Observe que estão separados por vírgula para indicar que o primeiro valor da lista pertence a coluna 1, o segundo valor da lista a coluna 2 e assim por diante.

Código completo:

import pandas as pd

df = pd.DataFrame(columns=['Nome coluna 1', 'Nome coluna 2', 'Nome coluna 3'])
for i in range(10):
  df.loc[i] = [f'Linha {i}', 4, 5]

print(df)

Veja como fica o resultado desse código acima:

Resultado do dataframe mostrado no código

Qualquer dúvida estou por aqui, tá bom? A gente vai conversando.

Grande abraço!