¿Cómo combino dos marcos de datos?

105

Estoy usando marcos de datos de Pandas. Tengo un marco de datos inicial, digamos D. Extraigo dos marcos de datos de esta manera:

A = D[D.label == k]
B = D[D.label != k]

luego cambio la etiqueta AyB

A.label = 1
B.label = -1

Quiero combinar A y B para poder tenerlos como un marco de datos, algo así como una operación de unión. El orden de los datos no es importante. Sin embargo, cuando tomamos muestras de A y B de D, conservan sus índices de D.

MKoosej
fuente

Respuestas:

148

Creo que puedes usar el appendmétodo

bigdata = data1.append(data2, ignore_index=True)

para mantener sus índices simplemente no use la ignore_indexpalabra clave ...

Joran Beasley
fuente
1
Esto funciona. Sin embargo, crea un nuevo DataFrame. ¿Hay alguna forma de hacerlo en línea? Eso sería bueno para cuando estoy cargando grandes cantidades de datos de una base de datos en lotes para poder actualizar iterativamente el DataFrame sin crear una copia cada vez.
Andrew
1
Sí, eso es posible, consulte: stackoverflow.com/a/46661368/5717580
martin-martin
91

También puede usar pd.concat, que es particularmente útil cuando está uniendo más de dos marcos de datos:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)
ostrokach
fuente
Quiero usar esto, pero estoy tratando de concatenar dos columnas del mismo nombre o_O
lifelonglearner
45

Pensé agregar esto aquí en caso de que alguien lo encuentre útil. @ostrokach ya mencionó cómo puede fusionar los marcos de datos en filas, lo cual es

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

Para fusionar columnas, puede utilizar la siguiente sintaxis:

df_col_merged = pd.concat([df_a, df_b], axis=1)
pelumi
fuente
14

Existe otra solución para el caso de que esté trabajando con big data y necesite concatenar varios conjuntos de datos. concatpuede obtener un rendimiento intensivo, por lo que si no desea crear un nuevo df cada vez, puede usar una lista de comprensión :

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)

(como se señala aquí en los documentos al final de la sección):

Nota : Sin embargo, vale la pena señalar que concat(y por lo tanto append) realiza una copia completa de los datos y que la reutilización constante de esta función puede generar un impacto significativo en el rendimiento. Si necesita utilizar la operación en varios conjuntos de datos, utilice una lista de comprensión.

martin martin
fuente
2

Si desea actualizar / reemplazar los valores del primer marco de datos df1con los valores del segundo marco de datos df2. puedes hacerlo siguiendo los pasos -

Paso 1: establecer el índice del primer marco de datos (df1)

df1.set_index('id')

Paso 2: establecer el índice del segundo marco de datos (df2)

df2.set_index('id')

y finalmente actualice el marco de datos con el siguiente fragmento:

df1.update(df2)
Mohsin Mahmood
fuente
0

1.er marco de datos

train.shape

resultado:-

(31962, 3)

Segundo marco de datos

test.shape

resultado:-

(17197, 2)

Combinar

new_data=train.append(test,ignore_index=True)

Cheque

new_data.shape

resultado:-

(49159, 3)
Harish Kumawat
fuente