¿Anexar a un DataFrame vacío en Pandas?

212

¿Es posible agregar a un marco de datos vacío que no contiene ningún índice o columna?

He intentado hacer esto, pero sigo obteniendo un marco de datos vacío al final.

p.ej

df = pd.DataFrame()
data = ['some kind of data here' --> I have checked the type already, and it is a dataframe]
df.append(data)

El resultado se ve así:

Empty DataFrame
Columns: []
Index: []
ericmjl
fuente
Respondí una pregunta similar aquí: stackoverflow.com/questions/13784192/… . básicamente algo como estonewDF = pd.DataFrame() #creates a new dataframe that's empty newDF = newDF.append(oldDF, ignore_index = True) # ignoring index is optional
geekidharsh
¿Anexar qué? Un solo valor? una lista de Python? una serie de pandas? Otro marco de datos? Su comentario ejemplo de arrastre sugiere que quiere decir otra trama de datos - por lo que dar una trama de datos en el código de ejemplo, ya :)
SMCI
Y cuando diga "El resultado se ve así", espero que no esté tratando de hacerlo directamente print(df.append(data)), porque append()siempre devuelve Ninguno en Python
smci

Respuestas:

388

Eso debería funcionar:

>>> df = pd.DataFrame()
>>> data = pd.DataFrame({"A": range(3)})
>>> df.append(data)
   A
0  0
1  1
2  2

Pero el appendque no ocurre en el lugar , por lo que tendrá que almacenar la salida si lo desea:

>>> df
Empty DataFrame
Columns: []
Index: []
>>> df = df.append(data)
>>> df
   A
0  0
1  1
2  2
DSM
fuente
8
¡Gracias! ¡Eso funciono! No me di cuenta de que tenía que almacenar la salida ... Probablemente debería haber leído mejor la documentación, ¡pero lo aprecio, @DSM!
ericmjl
9
¡Siempre olvido que necesitas asignarlo!
Andy B
66
en realidad ese apéndice no sucede en el lugar es la información más importante aquí;)
refuzee
66
No tengo idea de por qué los ejemplos de Pandas no muestran eso. ¡Gracias por tu ayuda!
Drew Szurko
2
tenga en cuenta que, al menos en junio de 2018, si desea que las nuevas filas se indexen automáticamente, debe escribir df.append (data, ignore_index = True). ¡Gracias por la gran respuesta!
Adam B
98

Y si desea agregar una fila, puede usar un diccionario:

df = pd.DataFrame()
df = df.append({'name': 'Zed', 'age': 9, 'height': 2}, ignore_index=True)

que te da:

   age  height name
0    9       2  Zed
dval
fuente
Bajo rendimiento, especialmente cuando se trata de datos grandes
raullalves
2
¿Puedes poner eso en relación con las otras alternativas propuestas, @raullalves?
Bouncner
23

Puede concatenar los datos de esta manera:

InfoDF = pd.DataFrame()
tempDF = pd.DataFrame(rows,columns=['id','min_date'])

InfoDF = pd.concat([InfoDF,tempDF])
Profundo
fuente
Gracias, probé el concat. Pero, ¿por qué tanto agregar como concat si pueden hacer el mismo trabajo?
Nitesh Kumar
Este hilo podría dar una buena explicación: stackoverflow.com/questions/15819050/…
Deepish