Liste in csv schreiben, Spaltentrennung funktioniert nicht

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
Marleb
User
Beiträge: 22
Registriert: Montag 5. August 2013, 11:00

Hallo, ich habe eine Liste (Pandas Dataframe) in der immer die Position und der Wert gelistet sind.
0 230
1 240
.
.
.
20 270

Beim schreiben in eine csv bekomme ich die Auftrennung von Wert und Position nicht hin. Es wird immer als zusammengehörig gelesen. Hat jemand eine Idee?

import csv
import pandas as pd
import numpy as np
from scipy import *
from numpy import *
import matplotlib.pyplot as plt

dF = pd.read_csv("Example.csv", sep=';') #schreibt csv daten in pandas dataframe(dF)

xresult = [] #kreiert leere liste
xresult = dF.x #schreibt Daten aus csv in leere liste
print xresult #zeigt inhalt der liste in python

setmax = 285
setmin = 210

for i in range(len(xresult)):
if xresult > setmax:
xresult= 'NaN'
elif xresult < setmin:
xresult = 'NaN'
print xresult

l = len(xresult) #bestimmt die Anzahl der Werte
print "Datenanzahl:",l
b=xresult.count()
print "Anzahl vorhandener Werte:",b
e = l-b
print "Anzahl fehlender Werte:",e

xresult = dF.x.fillna(method = 'ffill') #bfill=backwardfill, ffill is filling the list with value before if na(=NaN)

xresult = [abs(xresult)]#bildet den Betrag der Zahl

mean=np.mean(xresult)#berechnet den Mittelwert
print "Mittelwert:",mean
std=(np.std(xresult))#berechnet Standardabweichung
print "Standardabweichung:",std

max = mean*1.15#berechnet oberen Toleranzwert
min = mean*0.85#berechnet unteren Toleranzwert
print "Obere Toleranz:",max
print "Untere Toleranz:",min

print xresult

out = csv.writer(open("Ausgabe.csv","w"), delimiter='\t',quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in xresult:
out.writerow(row)
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast immer noch nicht die code-Tags im Forum gefunden???
90% Deines Codes sind für die Frage irrelevant.
Trotzdem ein Hinweis:
Was gibt denn Dein "print xresults" aus? Ist es ein Objekt, das aus Zeilen und Zellen besteht?
Benutzeravatar
Zennoe
User
Beiträge: 16
Registriert: Montag 12. August 2013, 21:46

Ich weiß nicht wieso du versucht die CSV-Datei mit pandas auszulesen.
Mach es am besten so:

Code: Alles auswählen

import csv
reader = csv.reader(open("datei.csv"), delimiter=";")
Die Liste könntest du so ausgeben (an dieser Stelle sollte dein Teil folgen):

Code: Alles auswählen

for row in reader:
    print(row)
Die Ausgabe wäre diese:

Code: Alles auswählen

['Inhalt1', 'ganzLangerInhalt', 'kurz']
['Inhalt2', 'nochmehrInhalt', 'tiny']
...
Also du weißt worauf es hinaus läuft. Vielleicht hilft dir das ja.

Code: Alles auswählen

print("Zennoe sprach!")
Ja, das hat er!
Marleb
User
Beiträge: 22
Registriert: Montag 5. August 2013, 11:00

Mit Pandas weil es mit anderen Befehlen nicht funktionieren wollte.

@sirius3

Man muss anscheinend die Werte in string umwandeln, aber es klappt noch immer nicht

print '\n'.join(map(str, xresult)) #converts each item in the list to a string, and then joins them

out = csv.writer(open("Ausgabe_Example.csv","w"), delimiter='\t',quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in xresult:
out.writerow('{}\n'.format(row))
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein Marleb, csv kann sehr gut mit Zahlen umgehen. Um Dir aber sinnvoll helfen zu können, wäre ein Minimalbeispiel nötig.
Z.B.:

Code: Alles auswählen

xresult = [[0, 0.213], [1, 0.321]]
with open("ausgabe.csv", "w") as out_csv:
    out = csv.writer(out_csv)
    for row in xresult:
        out.writerow(row)
Jetzt erwarte ich dies und bekomme aber das, oder es kommt der Fehler xy.
Marleb
User
Beiträge: 22
Registriert: Montag 5. August 2013, 11:00

Voher hatte ich eine Trennung der Werte durch Leerzeilen, durch deinen Code durch Komma
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Uhm ... Comma-Seperated-Values-Dateien sind nunmal (standardmaessig) durch Kommas getrennt.
Fuer Leerzeilen kann man den Begrenzer aendern:

Code: Alles auswählen

xresult = [[0, 0.213], [1, 0.321]]
with open("ausgabe.csv", "w") as out_csv:
    out = csv.writer(out_csv, delimiter="\n\n")
    for row in xresult:
        out.writerow(row)
Marleb
User
Beiträge: 22
Registriert: Montag 5. August 2013, 11:00

Dankeschön!
Antworten