Selektion von Werten aus einer CSV-Datei

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tomrause
User
Beiträge: 12
Registriert: Freitag 26. Februar 2021, 19:20

Hallo zusammen,
wahrscheinlich wohl zum 1.000ten Mal gefragt...

Wie kann ich aus einer CSV-Datei ROWS auslesen, die ganz bestimmten Kriterien genügen?
In SQL würde das etwa so aussehen (i, j die i-te bzw j-te Spalte):

"SELECT * FROM MYTABLE WHERE col(i) in ("X","Y","Z") or col(j)=25;"

ich verfolge im Moment diesen Ansatz:

Code: Alles auswählen

import csv
myfile=r"C:\MeinPath\MyFile.csv"
with open(myfile) as csvdatei:
    csv_reader_object = csv.reader(csvdatei, delimiter=';')
        for row in csv_reader_object:
            print(row) 
Das gibt mir den Inhalt der gesamten Liste im csv_reader_object aus.
Ich will aber nur die ROWS haben, bei denen z.B....
in Column1 der String X oder Y oder Z steht und
in Column 2 der Wert 25.

Welchen Hinweis könnt ihr mir bitte dazugeben?

Vielen Dank
Tom
Ich bitte um Hinweise
Danke
Tom
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

pandas zu benutzen & dazu ein Tutorial durcharbeiten. Das sollte da einer der ersten Dinge sein. Filtern des Frames nach Kriterien.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Alternativ ein Python-Grundlagentutorial durcharbeiten, denn in den gezeigten Code eine Bedingung zum Filtern in Python einzubauen ist jetzt auch nicht wirklich Raketentechnologie.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
tomrause
User
Beiträge: 12
Registriert: Freitag 26. Februar 2021, 19:20

Guten Morgen,
könnt ihr bitte aus der Flut von Grundlagentutorials eins empfehlen?
Besten Dank
Tom
Ich bitte um Hinweise
Danke
Tom
Benutzeravatar
Dennis89
User
Beiträge: 1555
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

es wird meist auf das offizielle Python-Tutorial verwiesen:
https://docs.python.org/3/tutorial/

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
tomrause
User
Beiträge: 12
Registriert: Freitag 26. Februar 2021, 19:20

Hallo zusmmen,
ich glaube ich hab's...

myinput= liste mit länderkennungen und shopnummern (... und anderen angaben), aus der n-Länder sowie spezielle shopnr in eine separate csv (myoutput) selektiert werden sollen

Code: Alles auswählen

import pandas as pd

#Standort Datenquelle
myinput=r"c:\tmp\python\scripts\inputfrom\mydata.csv"

#Standort Datenziel
myoutput=r"c:\tmp\python\scripts\outout\myquerieddata.csv"

#dataframe erzeugen mit Quelle, Semikolon separiert
df=pd.read_csv(myinput, sep=';')

#Bedingungen
qdf=df[(df.Land=="Land1")|(df.Land=="Land2")|(df.shopnr==123456)]

#Ergebnis ausgeben
qdf.to_csv(myoutput, index=0, header=1, sep=';')
Ich bitte um Hinweise
Danke
Tom
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Anmerkungen zum Quelltext: Kommentare sollen dem Leser einen Mehrwert über den Code geben. Faustregel: Kommentare beschreiben nicht *was* der Code macht, denn das steht da bereits als Code, sondern warum er das macht. Sofern das nicht offensichtlich ist. Offensichtlich ist in aller Regel auch was in der Dokumentation von Python und den verwendeten Bibliotheken steht.

`my` ist in 99,99% der Fälle ein vollkommen sinnloser Namenszusatz. Wenn es nicht auch ein `our_something` oder `their_something` gibt, wogegen das `my_something` abgegrenzt werden müsste, sagt dieses `my` einfach gar nichts aus.

Python hat einen Datentyp für Wahrheitswerte (`bool`) mit den Werten `True` und `False`. Da sollte man nicht 0 und 1 für missbrauchen.

Wenn man in der gleichen Spalte auf mehrere alternative Werte testen möchte, kann man auch die `isin()`-Methode verwenden.

Code: Alles auswählen

#!/usr/bin/env python3
import pandas as pd

INPUT_FILENAME = R"c:\tmp\python\scripts\inputfrom\mydata.csv"
OUTPUT_FILENAME = R"c:\tmp\python\scripts\outout\myquerieddata.csv"


def main():
    data = pd.read_csv(INPUT_FILENAME, sep=';')
    result = data[data.Land.isin(["Land1", "Land2"]) | (data.shopnr == 123456)]
    result.to_csv(OUTPUT_FILENAME, index=False, sep=';')


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
tomrause
User
Beiträge: 12
Registriert: Freitag 26. Februar 2021, 19:20

@__blackjack__
Vielen Dank, das zusammenfassen der Funktionalität in main() macht das ganze dann sehr übersichtlich.
Und so etwas wie 'isin()' hatte ich eigentlich gesucht.
Noch mal danke
Tom
Ich bitte um Hinweise
Danke
Tom
Antworten