Python : remplacer une cellule d'un CSV

Résolu/Fermé
Medestrac - 6 janv. 2023 à 13:29
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 6 janv. 2023 à 16:57

Bonjour,

J'ai un fichier csv de la forme suivante:

Article,Prix
Pomme,10
Banane,8
Fraise,6

Je souhaite modifier le prix de la banane.

Quelle est la meilleur solution? Faire un reader et parcourir les lignes à la recherche de "Banane", ou passer par pandas? J'ai essayé de lire la doc de ce dernier mais ce n'est pas très clair pour moi

df = pandas.read_csv("MonFichier.csv")
print(df)
print(df.at["Banane","Prix"])

me renvoie ceci:

Article  Prix
0       Pomme        10
1       Banane        8
2       Fraise        6
    row = self.index.get_loc(index)
  File "####", line 395, in get_loc
    raise KeyError(key)
KeyError: 'Banane'

Dans mon fichier je n'ai pas de colonne avec 0/1/2, d'où sort-elle?

3 réponses

Bonjour, les 0, 1, 2, .., n sont évidement les numéros de lignes.

Sinon, tu peux très facilement faire cela avec csv.

import csv

        
with open(LE_FICHIER_CSV) as f:
    reader = csv.DictReader(f)
    # construction d'un dict nom:prix
    fruits = {dico['Article']:int(dico['Prix']) for dico in reader}

# Augmentation du prix de la banane de 10%, l'importation devient chère !
fruits['Banane'] *= 1.1

# Et enfin enregistrement
with open(LE_FICHIER_CSV, 'w') as fw:
    writer = csv.writer(fw)
    writer.writerow(reader.fieldnames)
    for fruit, prix in fruits.items():
        writer.writerow((fruit, prix))

Sans doute qu'en sortant l'artillerie lourde comme panda on peut peut-être faire plus simple, mais ne connaissant pas panda, je laisse le soin à d'autres de répondre.

0

OK, ça marche, je vais rester sur l'utilisation de csv alors,

Merci

0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
6 janv. 2023 à 16:57

Bonjour,

Comme l'indique roupilleur, pandas est un peu surdimensionné pour manipuler un csv.

Comme la méthode avec csv est déjà donnée, voici comment tu pourrais faire en pandas. L'instruction suivante multiplie le prix des bananes par 10 :

df.loc[df["Article"] == "Banane", ["Prix"]] *= 10

... et celle-ci l'affecte à 12 :

df.loc[df["Article"] == "Banane", ["Prix"]] = 12

Ensuite tu peux réécrire ton csv avec pandas.to_csv.

Bonne chance

0