CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Trouver une valeur dans un fichier CSV (python)

da_yazell
da_yazell
Niveau 1
26 octobre 2021 à 14:41:12

Bonjour !

Je suis bloquée sur un truc tout simple (mais je suis une supra noob). J'ai un fichier CSV classant différentes étoiles par nom, magnitude, période, etc.. et j'aimerais, à l'aide d'un petit programme python, trouver les étoiles qui possèdent certaines caractéristiques.

Par exemple, si je cherchais toutes les étoiles ayant une magnitude < 13 ET une période < 1j. Comment je devrais faire ?

Merci beaucoup d'avance

Magrozz
Magrozz
Niveau 7
26 octobre 2021 à 14:58:53

Tu peux le faire facilement avec Pandas

Pseudo supprimé
Pseudo supprimé 26 octobre 2021 à 14:59:34

Charge ton CSV dans un DataFrame Pandas et tu filtres dessus.

Magrozz
Magrozz
Niveau 7
26 octobre 2021 à 15:06:50

Quelque chose dans ce style.

import pandas as pd

df = pd.read_csv('etoiles.csv')
results = df.loc[(df['magnitude'] < 13) & (df['periode'] < 1)]
print(results)
da_yazell
da_yazell
Niveau 1
26 octobre 2021 à 15:11:51

Le 26 octobre 2021 à 15:06:50 :
Quelque chose dans ce style.

import pandas as pd

df = pd.read_csv('etoiles.csv')
results = df.loc[(df['magnitude'] < 13) & (df['periode'] < 1)]
print(results)

Merci beaucoup !! Je vais voir si ça marche

Azerban
Azerban
Niveau 16
26 octobre 2021 à 15:17:05

Tu peux effectivement utiliser pandas mais tu peux aussi le faire assez facilement en "Python Standard Library" :

nom,distance,masse
saturne,158985,12656456
jupiter,205687,1235968
mars,125,2354
planetes = []

with open("planetes.csv", mode="r") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        if int(row["masse"]) >= 3000 and int(row["distance"]) >= 10000:
            planetes.append(row)

print(planetes)

Retourne (liste de dictionnaires) :

[{'nom': 'saturne', 'distance': '158985', 'masse': '12656456'}, {'nom': 'jupiter', 'distance': '205687', 'masse': '1235968'}]  # `planetes` est une liste de dictionnaires

En revanche, attention, toutes les données retournées sont des chaînes de caractères. Utilise pandas si tu ne veux pas t'embêter à les convertir dans les bons types.

da_yazell
da_yazell
Niveau 1
26 octobre 2021 à 15:21:25

Le 26 octobre 2021 à 15:06:50 :
Quelque chose dans ce style.

import pandas as pd

df = pd.read_csv('etoiles.csv')
results = df.loc[(df['magnitude'] < 13) & (df['periode'] < 1)]
print(results)

Bruh j'arrive pas à installer la bibliothèque pandas, ça me dit que pip n'est pas une commande reconnue

Magrozz
Magrozz
Niveau 7
26 octobre 2021 à 16:05:05

Le 26 octobre 2021 à 15:21:25 :

Le 26 octobre 2021 à 15:06:50 :
Quelque chose dans ce style.

import pandas as pd

df = pd.read_csv('etoiles.csv')
results = df.loc[(df['magnitude'] < 13) & (df['periode'] < 1)]
print(results)

Bruh j'arrive pas à installer la bibliothèque pandas, ça me dit que pip n'est pas une commande reconnue

installe pip d'abord

da_yazell
da_yazell
Niveau 1
02 novembre 2021 à 19:08:33

import csv

etoiles = []

with open("starlist.csv", mode="r") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        if row["Type"] == 'EW':
            etoiles.append(row)
        print(etoiles)

j'ai fait ça, mais ça me renvoie la même étoile indéfiniment...

Azerban
Azerban
Niveau 16
02 novembre 2021 à 19:36:42

Il faut que tu print ta variable à la fin du traitement (là tu affiches le contenu de ta variable dans la boucle, cad à chaque nouvelle ligne du fichier csv) :

import csv

etoiles = []

with open("starlist.csv", mode="r") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        if row["Type"] == 'EW':
            etoiles.append(row)

print(etoiles)
da_yazell
da_yazell
Niveau 1
02 novembre 2021 à 19:46:14

Le 02 novembre 2021 à 19:36:42 :
Il faut que tu print ta variable à la fin du traitement (là tu affiches le contenu de ta variable dans la boucle, cad à chaque nouvelle ligne du fichier csv) :

import csv

etoiles = []

with open("starlist.csv", mode="r") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        if row["Type"] == 'EW':
            etoiles.append(row)

print(etoiles)

J'ai testé déjà ça, mais ça m'en met qu'une seule ! Dès qu'il en trouve une il en cherche plus d'autre

Azerban
Azerban
Niveau 16
02 novembre 2021 à 19:52:18

Humm curieux, ce n'est pas ta colonne Type dans ton csv qui a des données en minuscule ?

Éventuellement remplace le if par :

if row["Type"].lower() == 'ew':
da_yazell
da_yazell
Niveau 1
02 novembre 2021 à 19:53:40

Le 02 novembre 2021 à 19:52:18 :
Humm curieux, ce n'est pas ta colonne Type dans ton csv qui a des données en minuscule ?

Éventuellement remplace le if par :

if row["Type"].lower() == 'ew':

Ah non en fait je suis juste conne il met tout sur une ligne XD
Il y aurait moyen de les print en colonne ? Ou directement de créer un nouveau fichier csv contenant uniquement les étoiles avec les bonnes caractéristiques ?

Message édité le 02 novembre 2021 à 19:53:54 par da_yazell
Azerban
Azerban
Niveau 16
02 novembre 2021 à 19:57:58

Le 02 novembre 2021 à 19:53:40 :

Le 02 novembre 2021 à 19:52:18 :
Humm curieux, ce n'est pas ta colonne Type dans ton csv qui a des données en minuscule ?

Éventuellement remplace le if par :

if row["Type"].lower() == 'ew':

Ah non en fait je suis juste conne il met tout sur une ligne XD
Il y aurait moyen de les print en colonne ? Ou directement de créer un nouveau fichier csv contenant uniquement les étoiles avec les bonnes caractéristiques ?

Le plus facile c'est d'utiliser pandas.

Mais comme tu as une liste de dictionnaires (la variable etoiles) tu peux boucler dessus et créer un nouveau fichier csv à la fin de ton premier traitement (trouver les bonnes étoiles).

Azerban
Azerban
Niveau 16
02 novembre 2021 à 20:06:04
import csv

etoiles = []

with open("etoiles.csv", mode="r") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        if int(row["masse"]) >= 3000 and int(row["distance"]) >= 10000:
            etoiles.append(row)


# Écriture dans un nouveau fichier "etoiles_processing.csv"
if etoiles is not None:
    fieldnames = etoiles[0].keys()
    with open("etoiles_processing.csv", mode="w") as csvfile:
        dict_writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        dict_writer.writeheader()
        dict_writer.writerows(etoiles)
else:
    print("Aucune étoile ne correspond à votre traitement, le nouveau fichier csv ne sera pas créé.")
da_yazell
da_yazell
Niveau 1
02 novembre 2021 à 20:21:25

Le 02 novembre 2021 à 20:06:04 :
import csv etoiles = [] with open("etoiles.csv", mode="r") as csvfile: reader = csv.DictReader(csvfile) for row in reader: if int(row["masse"]) >= 3000 and int(row["distance"]) >= 10000: etoiles.append(row) # Écriture dans un nouveau fichier "etoiles_processing.csv" if etoiles is not None: fieldnames = etoiles[0].keys() with open("etoiles_processing.csv", mode="w") as csvfile: dict_writer = csv.DictWriter(csvfile, fieldnames=fieldnames) dict_writer.writeheader() dict_writer.writerows(etoiles) else: print("Aucune étoile ne correspond à votre traitement, le nouveau fichier csv ne sera pas créé.")

Merci énormément !!! Ca marche

Magrozz
Magrozz
Niveau 7
03 novembre 2021 à 13:50:56

Essaye d'installer pandas et de l'utiliser si tu dois souvent faire ce genre de traitements, ça va te simplifier la vie.
C'était deux lignes et une troisième si tu veux écrire les résultats dans un csv (to_csv).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment