> 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
df2 = 100 * df / df.sum() : si df est un dataframe numérique avec étiquettes de lignes et colonnes avec des comptes, calcule les pourcentages par rapport au total pour chaque colonne.
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