> Modules non standards > Pandas > Dataframes et indexation
Dataframes et indexation
Quand on boucle sur un dataframe, on boucle sur les noms des colonnes :
for x in df:
print(x) # imprime le nom de la colonne
On peut boucler sur les lignes d'un dataframe, chaque ligne se comportant comme un namedtuple :
Accès à une colonne :
- df['A'] : renvoie la Series correspondant à la colonne de label A :
a1 1.1
a2 2.7
a3 5.3
Attention :
- df.loc[:, 'A'] : renvoie une series
- df.loc[:, ['A']] : renvoie un dataframe.
- df.iloc[3, :] : renvoie une series.
df['A'][0:3] : les 3 premières valeurs des 3 premières lignes de la colonne 'A' (sous forme de Series).
Accès à un sous-ensemble du dataframe avec les noms des lignes et colonnes :
Accès à un sous-ensemble du dataframe avec les numéros des lignes et colonnes :
- df.iloc[1] : renvoie la deuxième ligne.
- df.iloc[1:3,[0, 2]] : renvoie le dataframe avec les lignes 1 à 3 exclue, et les colonnes numéros 0 et 2.
- df.iloc[:,2:4] : renvoie toutes les lignes et les colonnes 2 à 4 exclue.
- df.iloc[1,2] : renvoie la valeur à la ligne 2 et la colonne 3.
- df.iat[1,2] : renvoie la valeur à la ligne 2 et la colonne 3, mais c'est la façon recommandée d'accéder aux valeurs.
- on peut aussi faire une affectation pour changer la valeur : df.iat[1, 2] = 7.
Type récupéré lors de l'accès par colonne d'une dataframe : si df est un dataframe avec 'A' parmi ses colonnes :
- df.loc[:,['A']] est un dataframe (avec une seule colonne).
- df.loc[:,'A'] est une series, comme df['A'].
Accès à certaines colonnes et certaines lignes par numéros : df.loc[:,['A', 'b']].iloc[0:2]
Quand on veut adresser une cellule d'un dataframe en utilisant à la fois un numéro de ligne et un nom de colonne :
- df.loc[df.index[3], 'A']
- ou alors df.iloc[3, df.columns.get_loc('A')]
Accès selon une condition :
s.index.to_list() : donne la liste des valeurs de l'index
Quand on a 2 index de dataframes :
- ind1.intersection(ind2) : les index communs.
- ind1.union(ind2) : la réunion des index.
- ind1.difference(ind2) : les index présents dans ind1, mais pas dans ind2.
- ind1.symmetric_difference(ind2) : la différence symétrique entre les 2 index
Réindexation d'un dataframe :
- df.reset_index() : renvoie un dataframe réindexé de 0 à n - 1, mais conserve une colonne index avec les anciennes valeurs de l'index !
- df.reset_index(drop = True) : renvoie un dataframe réindexé de 0 à n - 1
- df.reset_index(drop = True, inplace = True) : modifie le dataframe directement.
- Pour un dataframe qui a une colonne 'A' : df.set_index('A') renvoie un dataframe où l'index est la colonne A et la colonne A a disparu du dataframe lui-même
- df.set_index(['A', 'B']) : déplace les colonnes A et B du dataframe dans l'index plutôt que dans le dataframe.
Pour compter le nombre de lignes pour lesquelles on a une valeur : (df['A'] == 'x').sum()
Sampling d'un dataframe :
- df.sample(frac = 0.1) : retourne un dataframe avec 10% des lignes de départ, sans remise.
- df.sample(frac = 1) : fait un shuffling des lignes.
- df.sample(frac = 0.5, axis = 1): retourne 50% des colonnes.
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert