2016-03-26 1 views
2

zu exportieren Ich habe einen passenden Algorithmus, der Studenten zu Projekten verbindet. Es funktioniert, und ich habe Probleme beim Exportieren der Daten in eine CSV-Datei. Es nimmt nur den letzten Wert und exportiert nur, wenn 200 Werte exportiert werden sollen.Verwenden von Pandas, um mehrere Zeilen von Daten zu einem csv

Die Daten, die exportiert werden, verwendet jede Zahl als Wert, wenn ich das ganze 's' erhalten möchte, anstatt die drei 3 Zahlen, die 's' bilden, die in drei Spalten aufgeteilt sind. Ich habe die Bilder unten angehängt. Jede Hilfe wäre willkommen.

What it looks like

What it should look like

#Imports for Pandas 

import pandas as pd 
from pandas import DataFrame 

SPA() 
for m in M: 
    s = m['student'] 
    l = m['lecturer'] 
    Lecturer[l]['limit'] = Lecturer[l]['limit'] - 1 
    id = m['projectid'] 
    p = Project[id]['title'] 
    c = Project[id]['sourceid'] 
    r = str(getRank("Single_Projects1copy.csv",s,c)) 


    print(s+","+l+","+p+","+c+","+r) 

    dataPack = (s+","+l+","+p+","+c+","+r) 

    df = pd.DataFrame.from_records([dataPack]) 
    df.to_csv('try.csv') 

Antwort

1

Sie halten in der Schleife zu überschreiben, so dass Sie nur mit dem letzten Bit der Daten am Ende, müssen Sie mit df.to_csv('try.csv',mode="a",header=False) zum csv anhängen oder eine df erstellen und anhängen zu, dass auch außerhalb der Schleife schreiben, so etwas wie:

df = pd.DataFrame() 
for m in M: 
    s = m['student'] 
    l = m['lecturer'] 
    Lecturer[l]['limit'] = Lecturer[l]['limit'] - 1 
    id = m['projectid'] 
    p = Project[id]['title'] 
    c = Project[id]['sourceid'] 
    r = str(getRank("Single_Projects1copy.csv",s,c)) 


    print(s+","+l+","+p+","+c+","+r) 

    dataPack = (s+","+l+","+p+","+c+","+r) 

    df.append(pd.DataFrame.from_records([dataPack])) 
df.to_csv('try.csv') # write all data once outside the loop 

eine bessere Möglichkeit wäre, eine Datei zu öffnen und die Datei übergeben Objekt to_csv:

with open('try.csv', 'w') as f: 
    for m in M: 
     s = m['student'] 
     l = m['lecturer'] 
     Lecturer[l]['limit'] = Lecturer[l]['limit'] - 1 
     id = m['projectid'] 
     p = Project[id]['title'] 
     c = Project[id]['sourceid'] 
     r = str(getRank("Single_Projects1copy.csv",s,c)) 
     print(s+","+l+","+p+","+c+","+r) 

     dataPack = (s+","+l+","+p+","+c+","+r) 
     pd.DataFrame.from_records([dataPack]).to_csv(f, header=False) 

Sie erhalten individuelle Zeichen, weil Sie from_records vorbei einen einzelnen String dataPack als Wert verwenden, damit er die Zeichen iteriert:

In [18]: df = pd.DataFrame.from_records(["foobar,"+"bar"]) 

In [19]: df 
Out[19]: 
    0 1 2 3 4 5 6 7 8 9 
0 f o o b a r , b a r 

In [20]: df = pd.DataFrame(["foobar,"+"bar"]) 

In [21]: df 
Out[21]: 
      0 
0 foobar,bar 

Ich glaube, Sie im Grunde wie verlassen wollen ein Tupel dataPack = (s, l, p,c, r) und verwenden Sie pd.DataFrame(dataPack). Sie brauchen wirklich keine Pandas, die CSV-Bibliothek würde all das für Sie tun, ohne Dataframes erstellen zu müssen.

+0

Das Öffnen einer Datei funktioniert, es zeigt die Daten aller Schüler in der CSV. Vielen Dank für Ihre Eingabe, schätzen Sie es. In der CSV überspringt es den Header, aber die ersten Spalten bestehen aus 0. Ich muss Änderungen vornehmen, um die Spaltenstruktur richtig zu machen. – MrPool

+0

Ich wurde angewiesen, Pandas zu verwenden. Wenn die Daten in Zukunft in MySQL exportiert werden müssen, wäre das einfacher. – MrPool

+0

Möchten Sie den csv-Header aus der Datei verwenden oder erstellen Sie Ihre eigenen –

Verwandte Themen