¿Agregar una lista o serie a un DataFrame de pandas como una fila?
107
Así que inicialicé un DataFrame de pandas vacío y me gustaría agregar listas (o Series) iterativamente como filas en este DataFrame. Cual es la mejor manera de hacer esto?
A veces es más fácil hacer todos los anexos fuera de los pandas, luego, simplemente cree el DataFrame de una sola 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
Aquí hay una solución más simple y tonta: `` `importar pandas como pd df = pd.DataFrame () df = df.append ({'foo': 1, 'bar': 2}, ignore_index = True) # Tenga en cuenta que este anexo no sucede en su lugar. ``
Jaidev Deshpande
27
Siguiendo la respuesta de Mike Chirico ... si desea agregar una lista después de que el marco de datos ya esté poblado ...
>>> 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
Si desea agregar una Serie y usar el índice de la Serie como columnas del DataFrame, solo necesita agregar la Serie entre corchetes:
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]
Sin el ignore_index=True, no obtiene el índice adecuado.
Aquí hay una función que, dado un marco de datos ya creado, agregará una lista como una nueva fila. Esto probablemente debería incluir captadores de errores, pero si sabe exactamente lo que está agregando, entonces no debería ser un 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
Respuestas:
A veces es más fácil hacer todos los anexos fuera de los pandas, luego, simplemente cree el DataFrame de una sola vez.
fuente
list
. Acaba de sobrescribir ellist
constructor.fuente
df
.Aquí hay una solución simple y tonta:
fuente
¿Podrías hacer algo como esto?
¿Alguien tiene una solución más elegante?
fuente
Siguiendo la respuesta de Mike Chirico ... si desea agregar una lista después de que el marco de datos ya esté poblado ...
fuente
Si desea agregar una Serie y usar el índice de la Serie como columnas del DataFrame, solo necesita agregar la Serie entre corchetes:
Sin el
ignore_index=True
, no obtiene el índice adecuado.fuente
Aquí hay una función que, dado un marco de datos ya creado, agregará una lista como una nueva fila. Esto probablemente debería incluir captadores de errores, pero si sabe exactamente lo que está agregando, entonces no debería ser un problema.
fuente
La conversión de la lista a un marco de datos dentro de la función de agregar funciona, también cuando se aplica en un bucle
fuente
simplemente usa loc:
fuente
Como se menciona aquí, https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python , primero deberá convierta la lista en una serie y luego agregue la serie al marco de datos.
fuente
La forma más sencilla:
Editar:
No olvide que la longitud de la nueva lista debe ser la misma que la del marco de datos correspondiente.
fuente