Anexar uma lista ou série a um DataFrame do pandas como uma linha?
107
Portanto, inicializei um DataFrame do pandas vazio e gostaria de acrescentar listas (ou séries) iterativamente como linhas neste DataFrame. Qual a melhor maneira para fazer isto?
Às vezes é mais fácil fazer todos os acréscimos fora dos pandas, então, basta criar o DataFrame de uma vez.
>>>import pandas as pd
>>> simple_list=[['a','b']]>>> simple_list.append(['e','f'])>>> df=pd.DataFrame(simple_list,columns=['col1','col2'])
col1 col2
0 a b
1 e f
Aqui está uma solução mais simples e burra: `` `import pandas as pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Observe que este anexo não acontece no lugar. `` `
Jaidev Deshpande
27
Seguindo a resposta de Mike Chirico ... se você quiser adicionar uma lista depois que o dataframe já estiver preenchido ...
>>> list =[['f','g']]>>> df = df.append(pd.DataFrame(list, columns=['col1','col2']),ignore_index=True)>>> df
col1 col2
0 a b
1 d e
2 f g
Se você quiser adicionar uma série e usar o índice da série como colunas do DataFrame, você só precisa acrescentar a série entre colchetes:
In[1]:import pandas as pd
In[2]: df = pd.DataFrame()In[3]: row=pd.Series([1,2,3],["A","B","C"])In[4]: row
Out[4]:
A 1
B 2
C 3
dtype: int64
In[5]: df.append([row],ignore_index=True)Out[5]:
A B C
0123[1 rows x 3 columns]
Sem o, ignore_index=Truevocê não obtém o índice adequado.
Aqui está uma função que, dado um dataframe já criado, irá anexar uma lista como uma nova linha. Provavelmente, deve haver coletores de erros inseridos, mas se você souber exatamente o que está adicionando, isso não deve ser um problema.
import pandas as pd
import numpy as np
def addRow(df,ls):"""
Given a dataframe and a list, append the list as a new row to the dataframe.
:param df: <DataFrame> The original dataframe
:param ls: <list> The new row to be added
:return: <DataFrame> The dataframe with the newly appended row
"""
numEl = len(ls)
newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns))
df = df.append(newRow, ignore_index=True)return df
Respostas:
Às vezes é mais fácil fazer todos os acréscimos fora dos pandas, então, basta criar o DataFrame de uma vez.
fonte
list
. Você acabou de substituir olist
construtor.fonte
df
.Aqui está uma solução simples e estúpida:
fonte
Você poderia fazer algo assim?
Alguém tem uma solução mais elegante?
fonte
Seguindo a resposta de Mike Chirico ... se você quiser adicionar uma lista depois que o dataframe já estiver preenchido ...
fonte
Se você quiser adicionar uma série e usar o índice da série como colunas do DataFrame, você só precisa acrescentar a série entre colchetes:
Sem o,
ignore_index=True
você não obtém o índice adequado.fonte
Aqui está uma função que, dado um dataframe já criado, irá anexar uma lista como uma nova linha. Provavelmente, deve haver coletores de erros inseridos, mas se você souber exatamente o que está adicionando, isso não deve ser um problema.
fonte
Converter a lista em um quadro de dados dentro da função append funciona, também quando aplicada em um loop
fonte
simplesmente use loc:
fonte
Conforme mencionado aqui - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , você precisará primeiro converter a lista em uma série e, em seguida, anexar a série ao dataframe.
fonte
A maneira mais simples:
Editar:
Não se esqueça de que o comprimento da nova lista deve ser o mesmo do Dataframe correspondente.
fonte