Un moyen vraiment simple de modifier ligne par ligne dans un cadre de données Pandas
PYTHON
Utilisation de pd.loc pour modifier un sous-ensemble de vos données en fonction des conditions.
Avez-vous déjà eu besoin de modifier chaque ligne d’un tableau en fonction de certaines conditions?
C’est une tâche courante pour les projets d’analyse de données. J’avais l’habitude de rechercher dans StackOverflow une solution à chaque fois que je devais le faire. Enfin, j’ai lu la documentation Pandas et créé un modèle qui fonctionne chaque fois que j’ai besoin de modifier les données ligne par ligne.
Voici comment vous pouvez utiliser le pandas .loc pour sélectionner un sous-ensemble de vos données et le modifier s’il remplit une condition.
Remarque, avant d’essayer l’un des codes ci-dessous, n’oubliez pas d’importer des pandas.
import pandas as pd
La documentation Pandas a cette description pour « .loc[]« :
Accéder à un groupe de lignes et de colonnes (dans un
.DataFrame
) par étiquette (s) ou tableau booléen.
Pour notre cas, nous allons utiliser la méthode comme ceci:
df.loc[row_indexer,column_indexer]
Voici quelques exemples de données et une illustration de ce que le row_indexer
et column_indexer
font référence à. (Pour une explication sur la façon d’obtenir ces exemples de données, consultez mon autre article sur obtenir facilement des tableaux à partir de sites Web.)
df = pd.read_html('https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')[0]
Pour définir un row_indexer
, vous devez sélectionner l’une des valeurs en bleu. Ces chiffres dans la colonne la plus à gauche sont les «index de ligne», qui sont utilisés pour identifier chaque ligne. une column_indexer
, vous devez sélectionner l’une des valeurs en rouge, qui sont les noms de colonne du DataFrame.
Si nous voulions sélectionner le texte «M. Elon R. Musk ”, nous aurions besoin de faire ce qui suit:
df.loc[0,'Name']
Cela nous donne notre sortie souhaitée:
Maintenant que nous avons les bases, nous sommes prêts à commencer à éditer nos tableaux!
Supposons maintenant que nous voulions modifier la valeur «Titre» pour certaines personnes du tableau. Changeons Elon Musk en « The Boss Man », Zachary Kirkhorn en « The Money Man » et tout le monde en « Another Dude ».
Nous devons parcourir chaque ligne du tableau et vérifier quelle est la valeur «Nom», puis modifier la valeur «Titre» en fonction du changement que nous avons spécifié.
Pour parcourir les données ligne par ligne, nous allons utiliser df.index, qui sélectionne les «index de ligne» dans le DataFrame. Pour voir comment cela fonctionne, nous pouvons imprimer l’index à partir de notre exemple de table dans une boucle de base «pour»:
for index in df.index:
print(index)
Cela nous donne les mêmes valeurs que vous pouvez voir dans la colonne la plus à gauche dans la première capture d’écran.
Pour rechercher et modifier le bon sous-ensemble de données pour chaque ligne du DataFrame, nous utilisons le code suivant:
for index in df.index:
if df.loc[index,'Name']=='Mr. Elon R. Musk':
df.loc[index,'Title'] = 'The Boss Man'
elif df.loc[index,'Name']=='Mr. Zachary J. Kirkhorn':
df.loc[index,'Title'] = 'The Money Man'
else:
df.loc[index,'Title'] = 'Another Dude'
Cette boucle parcourt chaque ligne du DataFrame, vérifie ce qu’est le «Nom», puis édite le «Titre» en fonction de la condition qu’il remplit. Nos conditions sont de savoir si le «Nom» de la valeur de chaque ligne est avec «M. Elon R. Musk »,« M. Zachary J. Kirkhorn »et tout le monde.
Dans ce cas, parce que la première ligne a «M. Elon R. Musk « comme » Nom « , le script changera la valeur de » Titre « de cette première ligne en » The Boss Man « . Il sait quelle ligne effectuer cette modification, car nous avons spécifié l’index de ligne à l’aide df.loc[].
Le DataFrame résultant ressemble à ceci:
Nous avons réussi à modifier les valeurs de «Titre» de chaque ligne en fonction des conditions que nous avons spécifiées plus tôt!