Comment combiner deux trames de données?


106

J'utilise des trames de données Pandas. J'ai une trame de données initiale, disons D. J'en extrait deux trames de données comme ceci:

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

puis je change l'étiquette AetB

A.label = 1
B.label = -1

Je veux combiner A et B afin de pouvoir les avoir comme une seule trame de données, quelque chose comme une opération d'union. L'ordre des données n'est pas important. Cependant, lorsque nous échantillonnons A et B à partir de D, ils conservent leurs index de D.

Réponses:


150

Je crois que vous pouvez utiliser la appendméthode

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

pour conserver leurs index, n'utilisez pas le ignore_indexmot - clé ...


1
Cela marche. Il crée cependant un nouveau DataFrame. Existe-t-il un moyen de le faire en ligne? Ce serait bien lorsque je charge d'énormes quantités de données à partir d'une base de données par lots afin de pouvoir mettre à jour le DataFrame de manière itérative sans créer de copie à chaque fois.
Andrew

1

91

Vous pouvez également utiliser pd.concat, ce qui est particulièrement utile lorsque vous joignez plus de deux dataframes:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

Je veux utiliser ceci, mais j'essaye de concaténer deux colonnes du même nom o_O
lifelonglearner

45

Pensé pour ajouter ceci ici au cas où quelqu'un le trouverait utile. @ostrokach a déjà mentionné comment fusionner les blocs de données entre les lignes, ce qui est

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

Pour fusionner les colonnes, vous pouvez utiliser la syntaxe suivante:

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

14

Il existe une autre solution pour le cas où vous travaillez avec du Big Data et avez besoin de concaténer plusieurs ensembles de données. concatpeut être gourmand en performances, donc si vous ne voulez pas créer un nouveau df à chaque fois, vous pouvez à la place utiliser une compréhension de liste :

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

(comme indiqué ici dans la documentation en bas de la section):

Remarque : Il convient de noter cependant que concat(et donc append) fait une copie complète des données, et que la réutilisation constante de cette fonction peut créer un impact significatif sur les performances. Si vous devez utiliser l'opération sur plusieurs ensembles de données, utilisez une compréhension de liste.


2

Si vous souhaitez mettre à jour / remplacer les valeurs du premier dataframe df1par les valeurs du second dataframe df2. vous pouvez le faire en suivant les étapes -

Étape 1: définir l'index de la première trame de données (df1)

df1.set_index('id')

Étape 2: définir l'index de la deuxième trame de données (df2)

df2.set_index('id')

et enfin mettre à jour le dataframe à l'aide de l'extrait suivant -

df1.update(df2)

0

1ère dataFrame

train.shape

résultat:-

(31962, 3)

2ème dataFrame

test.shape

résultat:-

(17197, 2)

Combiner

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

Vérifier

new_data.shape

résultat:-

(49159, 3)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.