Ersetzen der leeren csv-Spalte die Werte mit einer null
So, ich bin den Umgang mit einer csv-Datei, die fehlenden Werte.
Was ich will, mein script ist:
#!/usr/bin/python
import csv
import sys
#1. Place each record of a file in a list.
#2. Iterate thru each element of the list and get its length.
#3. If the length is less than one replace with value x.
reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
for x in row[:]:
if len(x)< 1:
x = 0
print x
print row
Hier ist ein Beispiel der Daten, die ich versuchte es auf, es sollte im Idealfall arbeiten in einer beliebigen Spalte Länge
Before:
actnum,col2,col4
xxxxx , ,
xxxxx , 845 ,
xxxxx , ,545
After
actnum,col2,col4
xxxxx , 0 , 0
xxxxx , 845, 0
xxxxx , 0 ,545
Jede Beratung wäre geschätzt
Update Hier ist, was ich jetzt habe (danke):
reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
for i, x in enumerate(row):
if len(x)< 1:
x = row[i] = 0
print row
Jedoch, es scheint nur aus setzen einen Datensatz, ich werde umleiten der Ausgabe in eine neue Datei auf der Kommandozeile.
Update 3: Ok jetzt hab ich das gegenteilige problem, ich bin die Ausgabe von Duplikaten der einzelnen Datensätze.
Warum ist das passiert?
After
actnum,col2,col4
actnum,col2,col4
xxxxx , 0 , 0
xxxxx , 0 , 0
xxxxx , 845, 0
xxxxx , 845, 0
xxxxx , 0 ,545
xxxxx , 0 ,545
Ok, ich fixe es (unten) Dank Euch für Eure Hilfe.
#!/usr/bin/python
import csv
import sys
#1. Place each record of a file in a list.
#2. Iterate thru each element of the list and get its length.
#3. If the length is less than one replace with value x.
reader = csv.reader(open(sys.argv[1], "rb"))
for row in reader:
for i, x in enumerate(row):
if len(x)< 1:
x = row[i] = 0
print ','.join(str(x) for x in row)
- Der Grund, warum Sie drucken nur eine Zeile ist, dass Ihre print-Anweisung ist außerhalb der for-Schleife - Einzug es einmal, und Sie sollten in Ordnung sein.
- Sie können ersetzen "if len(x) <1:" mit " wenn x.strip():". "" wird zu False ausgewertet, und jeder string-Wert wird evaulate zu Wahren (einschließlich Leerzeichen).
- In Ihrem update entfernt man den
print
- Anweisung innerhalb der Schleife, wo Sie wirklich wollte, zu entfernen, die man außerhalb der Schleife. Möglicherweise möchten Sie auch zu Streifen Ihres strings, wie pro meine Antwort unten.
InformationsquelleAutor homerjay | 2010-05-19
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code ändern:
in:
Nicht sicher, was Sie denken, Sie sind die Erfüllung von der
print
, aber der Schlüssel Problem ist, dass Sie brauchen, um zu ändernrow
, und für diesen Zweck benötigen Sie eine index hinein, wasenumerate
gibt Sie.Beachten Sie auch, dass alle anderen Werte, außer die leere, die Sie ändern in die Anzahl
0
bleiben Streicher. Wenn Sie möchten, um Sie inint
s Sie zu tun haben, dass explizit.Sind Sie sehr fast da!
Sind es nur ein paar kleine bugs.
len(x)< 1
wird nicht funktionieren, für die zweite Spalte in der zweiten Zeile Ihrer Daten, dax
enthalten' '
(und haben eine Länge > 1). Sie müssenstrip
Saiten.print row
wahrscheinlich drucken Sie eine leere Liste, weil Sie abgeschlossen haben, Durchlaufen. Wahrscheinlich können Sie einfach entfernen Sie diese Zeile.Außerdem: versuchen Sie, die Datei zu ändern oder nur Ausgabe die Korrekturen der pipe zu einer anderen Datei oder Prozess?