Seite 1 von 1
Selektion von Werten aus einer CSV-Datei
Verfasst: Mittwoch 10. März 2021, 17:10
von tomrause
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
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Mittwoch 10. März 2021, 17:34
von __deets__
pandas zu benutzen & dazu ein Tutorial durcharbeiten. Das sollte da einer der ersten Dinge sein. Filtern des Frames nach Kriterien.
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Mittwoch 10. März 2021, 19:32
von __blackjack__
Alternativ ein Python-Grundlagentutorial durcharbeiten, denn in den gezeigten Code eine Bedingung zum Filtern in Python einzubauen ist jetzt auch nicht wirklich Raketentechnologie.
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Donnerstag 11. März 2021, 08:34
von tomrause
Guten Morgen,
könnt ihr bitte aus der Flut von Grundlagentutorials eins empfehlen?
Besten Dank
Tom
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Donnerstag 11. März 2021, 08:54
von Dennis89
Hallo,
es wird meist auf das offizielle Python-Tutorial verwiesen:
https://docs.python.org/3/tutorial/
Grüße
Dennis
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Donnerstag 11. März 2021, 09:24
von tomrause
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=';')
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Donnerstag 11. März 2021, 10:46
von __blackjack__
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()
Re: Selektion von Werten aus einer CSV-Datei
Verfasst: Donnerstag 11. März 2021, 16:36
von tomrause
@__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