Tengo un marco de datos:
s1 = pd.Series([5, 6, 7])
s2 = pd.Series([7, 8, 9])
df = pd.DataFrame([list(s1), list(s2)], columns = ["A", "B", "C"])
A B C
0 5 6 7
1 7 8 9
[2 rows x 3 columns]
y necesito agregar una primera fila [2, 3, 4] para obtener:
A B C
0 2 3 4
1 5 6 7
2 7 8 9
He probado append()
y concat()
funciona pero no puedo encontrar la manera correcta de hacerlo.
¿Cómo agregar / insertar series en el marco de datos?
s1.values
en lugar de,list(s1)
ya que creará una lista completamente nueva usandolist(s1)
.Respuestas:
Simplemente asigne una fila a un índice en particular, usando
loc
:Y obtienes, como desees:
Consulte en la documentación de Pandas Indexación: Configuración con ampliación .
fuente
df.loc[-1] = df.iloc[[0]]
, e insertarla? El marco viene con una columna de índice agregada que da errorValueError: cannot set a row with mismatched columns
(ver stackoverflow.com/questions/47340571/… )df.loc[-1] = [2, 3, 4] # adding a row
es un poco engañoso, ya-1
que no es la última fila / elemento, como lo es para las matrices de Python.No estoy seguro de cómo estaba llamando,
concat()
pero debería funcionar siempre que ambos objetos sean del mismo tipo. ¿Quizás el problema es que necesita convertir su segundo vector en un marco de datos? Usando el df que definiste, lo siguiente funciona para mí:fuente
Una forma de lograr esto es
Generalmente, es más fácil agregar marcos de datos, no series. En su caso, dado que desea que la nueva fila esté "en la parte superior" (con la identificación inicial), y no hay ninguna función
pd.prepend()
, primero creo el nuevo marco de datos y luego agrego el anterior.ignore_index
ignorará el antiguo índice en curso en su marco de datos y se asegurará de que la primera fila realmente comience con index en1
lugar de reiniciar con index0
.Descargo de responsabilidad típico: Cetero censeo ... agregar filas es una operación bastante ineficiente. Si le preocupa el rendimiento y de alguna manera puede asegurarse de crear primero un marco de datos con el índice correcto (más largo) y luego simplemente insertar la fila adicional en el marco de datos, definitivamente debería hacerlo. Ver:
Hasta ahora, tenemos lo que tenías como
df
:Pero ahora puede insertar fácilmente la fila de la siguiente manera. Dado que el espacio fue preasignado, esto es más eficiente.
fuente
Reuní una función corta que permite un poco más de flexibilidad al insertar una fila:
que podría reducirse aún más a:
Entonces podrías usar algo como:
donde
2
está la posición del índice endf
donde desea insertardf_new
.fuente
Podemos usar
numpy.insert
. Esto tiene la ventaja de la flexibilidad. Solo necesita especificar el índice en el que desea insertar.Porque
np.insert(df.values, 0, values=[2, 3, 4], axis=0)
, 0 le dice a la función el lugar / índice en el que desea colocar los nuevos valores.fuente
esto puede parecer demasiado simple, pero es increíble que no esté incorporada una función simple para insertar una nueva fila. He leído mucho sobre agregar un nuevo df al original, pero me pregunto si esto sería más rápido.
fuente
A continuación, se muestra la mejor manera de insertar una fila en el marco de datos de pandas sin ordenar y restablecer un índice:
fuente
Es bastante simple agregar una fila a un pandas
DataFrame
:Cree un diccionario Python normal con los mismos nombres de columnas que su
Dataframe
;Use el
pandas.append()
método y pase el nombre de su diccionario, donde.append()
es un método en las instancias de DataFrame;Agregue
ignore_index=True
justo después del nombre de su diccionario.fuente
concat()
parece ser un poco más rápido que la inserción y reindexación de la última fila. En caso de que alguien se pregunte acerca de la velocidad de dos enfoques superiores:17,1 s ± 705 ms por bucle (media ± desviación estándar de 7 corridas, 1 bucle cada una)
6,53 s ± 127 ms por bucle (media ± desviación estándar de 7 corridas, 1 bucle cada una)
fuente
Simplemente puede agregar la fila al final del DataFrame y luego ajustar el índice.
Por ejemplo:
O utilizar
concat
como:fuente
La forma más sencilla de agregar una fila en un marco de datos de pandas es:
Ejemplo:
NB: la longitud de su lista debe coincidir con la del marco de datos.
fuente