Comment fusionner (merger) deux ou plusieurs colonnes d'une dataframe en une seule colonne avec pandas ?

Published: 11 septembre 2022

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

Exemples de comment fusionner (merger) deux ou plusieurs colonnes d'une dataframe en une seule colonne avec pandas ?

Fusionner deux colonnes de chaîne de caractères ou plus avec pandas

Commençons par créer une dataframe avec pandas

import pandas as pd
import numpy as np

data = {'First_Name':['April','Emory','David','Alice','Virginia'],
        'Last_Name':['Reiter','Miller','Ballin','Trotter','Rios'],
        'Middle_Name':['G.','','H.G','',''],
        'Age':[42,24,12,32,56]}

df = pd.DataFrame(data=data)

print(df)

donne

  First_Name Last_Name Middle_Name  Age
0      April    Reiter          G.   42
1      Emory    Miller               24
2      David    Ballin         H.G   12
3      Alice   Trotter               32
4   Virginia      Rios               56

Fusionner deux colonnes de chaîne de caractères

Pour fusionner deux colonnes de chaînes de caractères, une solution simple consiste à faire :

df['First_Name'] + df['Last_Name']

donne alors

0     AprilReiter
1     EmoryMiller
2     DavidBallin
3    AliceTrotter
4    VirginiaRios
dtype: object

Pour ajouter un espace :

df['First_Name'] + ' ' + df['Last_Name']

donne

0     April Reiter
1     Emory Miller
2     David Ballin
3    Alice Trotter
4    Virginia Rios
dtype: object

Une autre solution consiste à utiliser pandas.DataFrame.agg:

df[['First_Name','Last_Name']].agg(' '.join, axis=1)

donne

0     April Reiter
1     Emory Miller
2     David Ballin
3    Alice Trotter
4    Virginia Rios
dtype: object

Un autre exemple, l'agrégation de trois colonnes

df[['First_Name','Middle_Name','Last_Name']].agg(' '.join, axis=1)

donne

0     April G. Reiter
1       Emory  Miller
2    David H.G Ballin
3      Alice  Trotter
4      Virginia  Rios
dtype: object

Créez une colonne Full_Name :

df['Full_Name'] = df[['First_Name','Middle_Name','Last_Name']].agg(' '.join, axis=1)

print(df)

donne

  First_Name Last_Name Middle_Name  Age         Full_Name
0      April    Reiter          G.   42   April G. Reiter
1      Emory    Miller               24     Emory  Miller
2      David    Ballin         H.G   12  David H.G Ballin
3      Alice   Trotter               32    Alice  Trotter
4   Virginia      Rios               56    Virginia  Rios

Notez que certaines lignes de la colonne Full_Name comportent deux espaces. Pour résoudre ce problème :

df['Full_Name'].str.replace("  "," ")

donne

0     April G. Reiter
1        Emory Miller
2    David H.G Ballin
3       Alice Trotter
4       Virginia Rios
Name: Full_Name, dtype: object

Fusionner une colonne de chaîne de caractères avec une colonne d'entiers

Pour fusionner une colonne de chaîne de caractères avec une colonne d'entiers, il faut d'abord convertir les nombres en une chaîne. Pour ce faire, une solution consiste à utiliser astype ():

df['Last_Name'] + ' ' + df['Age'].astype(str)

donne

0     Reiter 42
1     Miller 24
2     Ballin 12
3    Trotter 32
4       Rios 56
dtype: object

Un autre exemple utilisant agg():

df[['Last_Name','Age']].apply(lambda x : x.astype(str)).agg(' '.join, axis=1)

donne

0     Reiter 42
1     Miller 24
2     Ballin 12
3    Trotter 32
4       Rios 56
dtype: object

Fusionner des colonnes de nombres

Créons un nouvelle dataframe

import pandas as pd
import numpy as np

data = {'First_Name':['April','Emory','David','Alice','Virginia'],
        'Last_Name':['Reiter','Miller','Ballin','Trotter','Rios'],
        'Middle_Name':['G.','','H.G','',''],
        'Age':[42,24,12,32,56],
        'Score':[2,10,5,3,10]}

df = pd.DataFrame(data=data)

print(df)

donne

  First_Name Last_Name Middle_Name  Age  Score
0      April    Reiter          G.   42      2
1      Emory    Miller               24     10
2      David    Ballin         H.G   12      5
3      Alice   Trotter               32      3
4   Virginia      Rios               56     10

Alors

print( df['Age'] + df['Score'] )

va ajouter les deux colonnes ensemble :

0    44
1    34
2    17
3    35
4    66
dtype: int64

Pour concaténer les deux nombres :

print( df['Age'].astype(str) + ' -- '+ df['Score'].astype(str) )

donne

0     42 -- 2
1    24 -- 10
2     12 -- 5
3     32 -- 3
4    56 -- 10
dtype: object

Références