Converta uma lista de listas stringified em um dataframe enquanto mantém o índice

Manakin

Eu tenho o seguinte quadro de dados vindo de uma fonte de API, estou tentando organizar os dados, embora não altere maciçamente meu quadro de dados original (não quero fazer um produto cartesiano essencialmente)

data = ["[['Key','Metric','Value'],['foo','bar','4'],['foo2','bar2','55.21']]",
        "[['Key','Metric','Value'],['foo','bar','5']]",
        "[['Key','Metric','Value'],['foo','bar','6'],['foo1','bar1',''],['foo2','bar2','57.75']]"]

df = pd.DataFrame({'id' : [0,1,2],'arr' : data})

print(df)
      id                                                arr
0   0  [['Key','Metric','Value'],['foo','bar','4'],['...
1   1       [['Key','Metric','Value'],['foo','bar','5']]
2   2  [['Key','Metric','Value'],['foo','bar','6'],['...

O Key Value Metricinforma a ordem dos arrays dentro do que estou tentando fazer é ordená-lo em um dicionário de {chave: valor} onde a chave é o Key& Metriccampos unidos e o valor é o -1índice da lista aninhada.

Os dados de origem vêm do Excel e da API do MS Graph, não imagino que isso vá mudar, mas pode, então estou tentando encontrar uma solução dinâmica.

meu dataframe de destino é:

target_df = pd.DataFrame({'id' : [0,1,2],
                         'foo_bar' : [4,5,6],
                         'foo1_bar1' : [np.nan, np.nan,''],
                         'foo2_bar2' : [55.21, np.nan, 57.75]})

print(target_df)

   id  foo_bar  foo1_bar1  foo2_bar2
0   0        4        NaN      55.21
1   1        5        NaN        NaN
2   2        6                 57.75

minhas próprias tentativas têm sido usar literal_eval da astbiblioteca para obter a primeira lista que será sempre o Key Metric& Valuecoluna - lá talvez, no futuro, um Key Metric, Metric2, Valuecampo - daí o meu desejo de manter as coisas dinâmico.

sempre haverá um único campo Key& Value.

Tentativa própria:

from ast import literal_eval

literal_eval(df['arr'][0])[0]
#['Key', 'Value', 'Metric']

com isso, substituí os caracteres da lista e dividi ,então converti o resultado em um dataframe:

df['arr'].str.replace('\[|\]','').str.split(',',expand=True)

no entanto, depois disso, não deixei muito claro o que fazer e me pergunto se estou fazendo isso da maneira errada?

Grzegorz Skibinski

Experimentar:

df2=df["arr"].map(eval).apply(lambda x: pd.Series({f"{el[0]}_{el[1]}": el[2] for el in x[1:]}))

df2["id"]=df["id"]

Resultado:

  foo_bar foo2_bar2 foo1_bar1  id
0       4     55.21       NaN   0
1       5       NaN       NaN   1
2       6     57.75             2

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Converta coluna de dataframe em lista de listas e converta de volta em dataframe, enquanto mantém a associação de ID

Converta um Dataframe Pandas em uma lista de listas

Converta listas de tuplas de linhas em um dataframe do pandas em uma lista de tuplas

Converta um dataframe em uma lista de listas com base em recursos comuns

Como faço para empilhar listas de uma matriz por um determinado índice enquanto preservo a lista?

Use o conteúdo de 2 listas e combine valores (stringified) no mesmo índice em uma terceira lista

Converta dataframe R em uma lista JSON de listas para o modelo d3.hierarchy

Inserindo um elemento em uma lista enquanto mantém a ordem

Converta uma lista de séries de pandas com o mesmo índice em um dicionário

Converta a matriz em uma lista de listas

Para uma coluna DataFrame do pandas, converta uma lista de listas em uma lista de tuplas

Como agrupar o índice de intervalo, agregar a média em uma lista de listas e unir a outro dataframe?

Verifique se uma condição se mantém em uma lista de listas

Converta uma lista de listas em um conjunto de listas em Python 3

Adicionar um índice a uma lista de listas em python

selecione um elemento de uma lista aninhada e converta-o em dataframe em R

Converta um dicionário de strings e listas em uma lista de listas

Mesclar listas são múltiplas colunas de um dataframe do pandas em uma única lista em uma coluna

Converta uma lista de tuplas em uma lista de listas

Converta uma lista de tuplas em uma lista de listas

Converta uma lista de dicionário em um dataframe

Converta uma lista de dicionário em um dataframe

Converta um DataFrame em uma lista: tipo de elementos

Como converter uma lista de listas em dataframe e tornar o primeiro elemento das listas como o índice

Como converter uma lista de listas em um dataframe onde o primeiro elemento é o índice, o segundo é o nome da coluna

Obtenha o item em uma lista de lista para comparar com um valor enquanto itera as duas listas Python

Converta a lista de listas em dataframe, onde cada lista representa uma linha, preservando os tipos

Usando o pyspark, como expandir uma coluna contendo um mapa de variáveis para novas colunas em um DataFrame enquanto mantém outras colunas?

Transforme o dicionário em uma coluna de um dataframe enquanto mantém os nomes das linhas do dicionário em outra coluna (python)

TOP lista

quentelabel

Arquivo