Digamos que eu tenha um dicionário com 10 pares de valores-chave. Cada entrada contém uma matriz numpy. No entanto, o comprimento da matriz não é o mesmo para todos eles.
Como posso criar um dataframe onde cada coluna contém uma entrada diferente?
Quando tento:
pd.DataFrame(my_dict)
Eu recebo:
ValueError: arrays must all be the same length
Alguma maneira de superar isso? Estou feliz por ter Pandas usando NaN
para preencher essas colunas para as entradas mais curtas.
pd.Series(...)
(supondoimport pandas as pd
na seção de importação)pd.DataFrame({k: pd.Series(l) for k, l in d.items()})
Esta é uma maneira simples de fazer isso:
fonte
columns
mas este já é o padrão. Veja a documentação do pandas - pandas.DataFrame.from_dictUma maneira de organizar sua sintaxe, mas ainda fazer essencialmente a mesma coisa que essas outras respostas, está abaixo:
Uma sintaxe semelhante também existe para listas:
Outra sintaxe para listas é:
Além disso, você pode ter que transpor o resultado e / ou alterar os tipos de dados da coluna (float, inteiro, etc).
fonte
Embora isso não responda diretamente à pergunta do OP. Descobri que esta é uma excelente solução para o meu caso quando tinha matrizes desiguais e gostaria de compartilhar:
da documentação do pandas
fonte
Você também pode usar
pd.concat
juntoaxis=1
com uma lista depd.Series
objetos:fonte
Ambas as linhas a seguir funcionam perfeitamente:
Mas com% timeit no Jupyter, obtive uma proporção de 4x a velocidade para B vs A, o que é bastante impressionante, especialmente quando se trabalha com um grande conjunto de dados (principalmente com um grande número de colunas / recursos).
fonte
Se você não quiser que apareça
NaN
e tiver dois comprimentos específicos, adicionar um 'espaço' em cada célula restante também funcionaria.Se você tiver mais de 2 comprimentos de entradas, é aconselhável fazer uma função que use um método semelhante.
fonte
pd.DataFrame ([my_dict]) vai servir!
fonte