Eu tenho uma lista de dicionários como este:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
E eu quero transformar isso em pandas DataFrame
assim:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Nota: A ordem das colunas não importa.
Como transformar a lista de dicionários em um DataFrame do pandas, como mostrado acima?
python
dictionary
pandas
dataframe
appleLover
fonte
fonte
df = df.set_index('time')
depoispandas.DataFrame
'{"":{"...
você usa a abordagem json_normalize, veja a resposta detalhada de @ cs95As outras respostas estão corretas, mas pouco foi explicado em termos de vantagens e limitações desses métodos. O objetivo deste post será mostrar exemplos desses métodos em diferentes situações, discutir quando usar (e quando não usar) e sugerir alternativas.
DataFrame()
,,DataFrame.from_records()
e.from_dict()
Dependendo da estrutura e formato dos seus dados, há situações em que todos os três métodos funcionam, ou alguns funcionam melhor que outros, ou alguns não funcionam.
Considere um exemplo muito artificial.
Esta lista consiste em "registros" com todas as chaves presentes. Este é o caso mais simples que você pode encontrar.
Palavra no dicionário Orientações:
orient='index'
/'columns'
Antes de continuar, é importante fazer a distinção entre os diferentes tipos de orientações do dicionário e apoiar com os pandas. Existem dois tipos principais: "colunas" e "índice".
orient='columns'
Dicionários com a orientação "colunas" terão suas chaves correspondentes a colunas no DataFrame equivalente.
Por exemplo,
data
acima está no oriente "colunas".Nota: Se você estiver usando
pd.DataFrame.from_records
, a orientação será assumida como "colunas" (você não pode especificar o contrário) e os dicionários serão carregados de acordo.orient='index'
Nesse sentido, presume-se que as chaves correspondam aos valores do índice. Esse tipo de dados é mais adequado
pd.DataFrame.from_dict
.Esse caso não é considerado no OP, mas ainda é útil saber.
Definir índice personalizado
Se você precisar de um índice personalizado no DataFrame resultante, poderá configurá-lo usando o
index=...
argumentoIsso não é suportado por
pd.DataFrame.from_dict
.Lidando com chaves / colunas ausentes
Todos os métodos funcionam imediatamente ao manipular dicionários com valores de chaves / colunas ausentes. Por exemplo,
Subconjunto de colunas de leitura
"E se eu não quiser ler em todas as colunas"? Você pode especificar isso facilmente usando o
columns=...
parâmetroPor exemplo, no dicionário de exemplo
data2
acima, se você quiser ler apenas as colunas "A ',' D 'e' F ', poderá fazê-lo passando uma lista:Isso não é suportado pelas
pd.DataFrame.from_dict
"colunas" orientais padrão.Subconjunto de linhas de leitura
Não é suportado por nenhum desses métodos diretamente . Você precisará iterar sobre seus dados e executar uma exclusão reversa no local enquanto itera. Por exemplo, para extrair apenas a 0 º e 2 nd linhas de
data2
acima, você pode usar:Panaceia:
json_normalize
para dados aninhadosUma alternativa forte e robusta aos métodos descritos acima é a
json_normalize
função que trabalha com listas de dicionários (registros) e, além disso, também pode lidar com dicionários aninhados.Novamente, lembre-se de que os dados transmitidos
json_normalize
precisam estar no formato de lista de dicionários (registros).Como mencionado,
json_normalize
também pode manipular dicionários aninhados. Aqui está um exemplo retirado da documentação.Para mais informações sobre os argumentos
meta
erecord_path
, consulte a documentação.Resumindo
Aqui está uma tabela de todos os métodos discutidos acima, juntamente com os recursos / funcionalidades suportados.
* Use
orient='columns'
e transponha para obter o mesmo efeito queorient='index'
.fonte
No pandas 16.2, eu tinha que fazer
pd.DataFrame.from_records(d)
para que isso funcionasse.fonte
deque
0.17.1
com solução @joris0.18.1
, é preciso usarfrom_records
se os dicionários não tiverem todas as mesmas chaves.Você também pode usar
pd.DataFrame.from_dict(d)
como:fonte
dict
s, não de um único,dict
como você supôs em sua resposta.Eu sei que algumas pessoas vão se deparar com isso e não encontrar nada aqui ajuda. A maneira mais fácil de encontrar é assim:
Espero que isso ajude alguém!
fonte
e chamada simples:
fonte
fonte
Para converter uma lista de dicionários em um DataFrame do pandas, você pode usar "anexar":
Temos um dicionário chamado
dic
e dic tem 30 itens de lista (list1
,list2
...,list30
)total_df
)total_df
comlist1
total_df
fonte
DataFrame()
,DataFrame.from_records()
e.from_dict()
?