Exemples de comment échanger les lignes et les colonnes (i.e. transposer) une dataframe avec pandas en python:
Créer un dataframe avec pandas
Créons d'abord une dataframe avec pandas
import pandas as pddata = {'Age':[21,26,82,15,28],'Id':['jch2c1','63jc2h','hg217d','hj127b','edew32'],'weight':[120,148,139,156,129],'Gender':['male','male','female','male','female'],'Country':['France','USA','USA','Germany','USA']}df = pd.DataFrame(data=data,index=['A','B','C','D','E'])
donne
Age Id weight Gender CountryA 21 jch2c1 120 male FranceB 26 63jc2h 148 male USAC 82 hg217d 139 female USAD 15 hj127b 156 male GermanyE 28 edew32 129 female USA
Transposer une dataframe
Pour transposer rapidement une dataframe, une solution simple consiste à faire :
df.T
donne ici
A B C D EAge 21 26 82 15 28Id jch2c1 63jc2h hg217d hj127b edew32weight 120 148 139 156 129Gender male male female male femaleCountry France USA USA Germany USA
Pour le rendre plus permanent:
df = df.T
Transposer une dataframe avec transpose()
Avec l'option copy = False
Une autre solution consiste à utiliser
new_df = df.transpose()
Notez que par défaut transpose() a l'option copy = False.
donne
A B C D EAge 21 26 82 15 28Id jch2c1 63jc2h hg217d hj127b edew32weight 120 148 139 156 129Gender male male female male femaleCountry France USA USA Germany USA
Ensuite, si la dataframe d'origine est modifiée :
df.loc['A','weight'] = -9999
donne
Age Id weight Gender CountryA 21 jch2c1 -9999 male FranceB 26 63jc2h 148 male USAC 82 hg217d 139 female USAD 15 hj127b 156 male GermanyE 28 edew32 129 female USA
la dataframe transposée n'est pas affectée puisque copy = False
A B C D EAge 21 26 82 15 28Id jch2c1 63jc2h hg217d hj127b edew32weight 120 148 139 156 129Gender male male female male femaleCountry France USA USA Germany USA
Avec l'option copy = True
Maintenant avec l'option copy = True:
new_df = df.transpose(copy=True)
si la dataframe d'origine est modifiée :
df.loc['A','weight'] = -9999
donne
Age Id weight Gender CountryA 21 jch2c1 -9999 male FranceB 26 63jc2h 148 male USAC 82 hg217d 139 female USAD 15 hj127b 156 male GermanyE 28 edew32 129 female USA
alors la dataframe transposée est AUSSI affectée :
A B C D EAge 21 26 82 15 28Id jch2c1 63jc2h hg217d hj127b edew32weight -9999 148 139 156 129Gender male male female male femaleCountry France USA USA Germany USA
