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.
>>> 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
list
. Acaba de sobrescribir el list
constructor.
df = pd.DataFrame(columns=list("ABC"))
df.loc[len(df)] = [1,2,3]
df
.
Aquí hay una solución simple y tonta:
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df = df.append({'foo':1, 'bar':2}, ignore_index=True)
¿Podrías hacer algo como esto?
>>> import pandas as pd
>>> df = pd.DataFrame(columns=['col1', 'col2'])
>>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True)
>>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True)
>>> df
col1 col2
0 a b
1 d e
¿Alguien tiene una solución más elegante?
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
0 1 2 3
[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
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.
df = pd.DataFrame([[1, 2], [3, 4]], columns = ["a", "b"])
to_append = [5, 6]
a_series = pd.Series(to_append, index = df.columns)
df = df.append(a_series, ignore_index=True)