Data Science, Python, Economie ...

Accueil

Scinder et rassembler les données dans une colonne

Comment scinder ou concaténer les colonnes d'un dataframe ou d'une série ?

Series.str.split() - Scinder en plusieurs colonnes

La méthode series.str.split()series.str.split()
.str.split() agit sur les données de format string en les séparant selon une clé spécifiée.

La méthode s'appelle sur les series et non les [[dataframe|dataframes]]. Pour l'utiliser lorsque l'objet est un dataframe, il est nécessaire d'utiliser l'index pour que l'objet sur lequel str.split est appelé soit une series.

La clé par défaut est ' ' :

s = pd.Series("I am a man",
"I am a woman")

s.str.split()

[I, am, a, man]
[I, am, a, woman]


Avec une clé différente :

s = pd.Series("I ...
s'appelle sur une colonne d'un dataframe ou une series et retourne dans sa forme simple une liste pour chaque ligne. En pratique on passe de :

Users
Homme,20 ans
Femme,45 ans
Femme,15 ans

à

Users
[Homme,20 ans]
[Femme,45 ans]
[Femme,15 ans]

avec en donnant ',' comme séparateur :

df['users'].str.split(',')

L'option expand=True produit une colonne par produit :

df'sexe', 'age' = df['users'].str.split(',', expand=True)
sexe age
Homme 20 ans]
Femme 45 ans
Femme 15 ans

Avec Series.str.get(), on peut sélection l'index de la liste que l'on désire :

df['sexe'] = df['users'].str.split(',').get(0)

|sexe| |-| |Homme| |Femme| |Femme|

À noter : il est possible d'utiliser .str.split() sur un index, ce qui produira un index multiniveaux.

Series.Str.cat()- Regrouper plusieurs colonnes en une seule.

La méthode series.str.split()series.str.split()
.str.split() agit sur les données de format string en les séparant selon une clé spécifiée.

La méthode s'appelle sur les series et non les [[dataframe|dataframes]]. Pour l'utiliser lorsque l'objet est un dataframe, il est nécessaire d'utiliser l'index pour que l'objet sur lequel str.split est appelé soit une series.

La clé par défaut est ' ' :

s = pd.Series("I am a man",
"I am a woman")

s.str.split()

[I, am, a, man]
[I, am, a, woman]


Avec une clé différente :

s = pd.Series("I ...
s'appelle sur une colonne d'un dataframe ou une series et concatène les strings de deux colonnes :

df['users'] = df['sexe'].str.cat(df['age'], sep=',')
Users
Homme,20 ans
Femme,45 ans
Femme,15 ans

À noter : on peut aussi passer une liste ou une Series à la place de df['age'], dans .str.cat()

Cela peut être utile avec la fonction pd.melt()Manipuler les formats longs et larges de données
Les données tabulaires peuvent se présenter sous deux aspects : "long" ou "large".

Définition

Format long

Dans le cas des données dites longues, chaque ligne correspond à un attribut d'une observation dont l'identifiant et la valeur associés sont situés dans une colonne à part. On a donc un grand nombre de lignes, égal à attributs*observations.

La structure est semblable à un dictionnaire, avec des paires clé/valeur emboitées. Elle est pratique lorsque l'on récolte des données dont on ne...
si l'on a deux colonnes d'identifiant que l'on désire regrouper en une seule.

df.explode() - Scinder une colonne en lignes supplémentaires

Scinder une liste

La fonction df.explode() scinde une colonne de longueur $n$ contenant une liste de $k$ valeurs et produit une colonne de taille $n \cdot k$ :

df['users'].explode()
  • users
  • 0 Homme
    0 20 ans
    1 Femme
    1 45 ans
    2 Femme
    2 15 ans

À noter : Chaque ligne possède l'index de sa ligne originelle.

On peut exploiter cette particularité de l'index pour scinder une colonne tout en gardant ses identifiant, en utilisant df.merge() :

cities_explode = cities['zip_code'].explode()
cities[ [ `city`, `country] ].merge(cities_explode, 
									left_index=True, 
									right_index=True)

On peut aussi le faire (plus rapidement) en précisant la colonne que l'on veut scinder :

cities_explode = cities.explode('zip_code')

Attention toutefois, cette méthode peut produire des valeurs manquantes si des listes vides sont dans la colonne.

Scinder une colonne string en plusieurs lignes

On chaine les méthodes df.assign(), series.str.split()series.str.split()
.str.split() agit sur les données de format string en les séparant selon une clé spécifiée.

La méthode s'appelle sur les series et non les [[dataframe|dataframes]]. Pour l'utiliser lorsque l'objet est un dataframe, il est nécessaire d'utiliser l'index pour que l'objet sur lequel str.split est appelé soit une series.

La clé par défaut est ' ' :

s = pd.Series("I am a man",
"I am a woman")

s.str.split()

[I, am, a, man]
[I, am, a, woman]


Avec une clé différente :

s = pd.Series("I ...
, series.explode() :

cities.assign(zip_code=cities['zip_code'].str.split(',')).explode(`zip_code`)