> Modules non standards > Pandas > Opérations sur les Dataframes
Opérations sur les Dataframes
Lors des opérations sur les dataframes, les noms des lignes et des colonnes sont automatiquement alignés :
df1 = pandas.DataFrame({'A': [1, 2], 'B': [3, 4]}, index = ['a', 'c'])
df2 = pandas.DataFrame({'A': [1, 2], 'C': [7, 5]}, index = ['b', 'c'])
df1 + df2 donne :
A B C
a NaN NaN NaN
b NaN NaN NaN
c 4.0 NaN NaN
Autre exemple : si
df1 = pandas.DataFrame({'a': [1, 3, 4], 'b': [5, 3, 1]}, columns = ['a', 'b']); df2 = pandas.DataFrame({'b': [5, 2, 0], 'a': [1, 2, 8]}, columns = ['b', 'a'], index = [2, 1, 0]); alors
df1 + df2 donne :
a b
0 9 5
1 5 5
2 5 6
Opérations possibles :
- df1 + df2
- 2 * df + 3
- 1 / df : opération élément par élément.
- df ** 2 : carré de chaque élément.
- pour des dataframes booléens comme pandas.DataFrame({'A': [1, 0, 0], 'B': [0, 1, 1]}, dtype = bool) :
- -df : not.
- df1 & df2 : et.
- df1 | df2 : ou.
- df1 ^ df2 : ou exclusif.
- opérations de comparaison : df1.eq(df2), df1.ne(df2), df1.lt(df2), df1.le(df2), df1.lt(df2), df1.le(df2) : égalité, non égalité, <, <=, >, >=. Ils renvoient des dataframes booléens.
- on peut aussi faire df1 == df2, mais attention, cela renvoie aussi un dataframe de booléens.
- réductions booléennes :
- (df > 0).all() : renvoie une série avec un élément par colonne qui est True si toutes les valeurs sont > 0
- (df > 0).any() : renvoie une série avec un élément par colonne qui est True si une des valeurs est > 0
- on peut aussi faire l'évaluation par ligne : (df > 0).all(axis = 1)
- on peut réduire un dataframe à une seule valeur booléenne, par exemple : (df > 0).all().all() : true si toutes les valeurs sont > 0 (pareil avec any ou une combinaison de any et all).
- attention, si un dataframe contient des NaN, (df == df).all().all() est False !
- par contre, il y a une méthode equals : df1.equals(df2) : renvoie True si les 2 dataframes ont mêmes valeurs, même si elles ont des NaN (au même endroit bien sûr).
Opérations sur tout le dataframe avec une ligne ou une colonne :
- df.add(df['A'], axis = 1) : pour ajouter une colonne à toutes les autres.
- idem avec sub(), mul(), div() pour les autres opérations.
- df.add(df.iloc[0], axis = 1) : pour l'ajout d'une ligne à toutes les autres.
Pour enlever la moyenne d'une colonne ou d'une ligne à un dataframe :
- par colonne, c'est facile : df - df.mean()
- par ligne : df.sub(df.mean(axis = 1), axis = 0)
on peut faire le même genre d'opérations avec sub, mul, div, pow et mod
Pour normaliser un dataframe pour que la somme de chaque colonne soit identique : df2 = df.mul(df.sum.mean() / df.sum(), axis = 1)
Trouver les valeurs uniques de plusieurs colonnes : df.groupby(['A', 'B']).size().reset_index().loc[:, ['A', 'B']]
df.groupby(['A', 'B'], as_index = False).size() : les colonnes A et B ne terminent pas dans l'index.
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert