2016-03-26 14 views
2

Öğrencileri projelere bağlayan eşleştirme algoritmam var. Çalışıyor ve verileri bir csv dosyasına aktarırken sorun yaşıyorum. Sadece son değeri alır ve sadece ihraç edilecek 200 değer olduğunda ihracat yapar.Birden çok satırlık veriyi bir csv'ye dışa aktarmak için Panda'ları kullanma

Dışa aktarılan veriler, üç sütun olarak ayrılan 's' oluşturan üç 3 sayısından ziyade, tüm 's' yerine almak istediğimde her sayıyı bir değer olarak kullanır. Aşağıdaki görüntüleri ekledim. Herhangi bir yardım takdir edilecektir.

What it looks like

What it should look like

Sen sadece verilerin son bit ile bitirmek böylece döngü içinde üzerine yazmasını tutmak
#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') 

cevap

1

, sen df.to_csv('try.csv',mode="a",header=False) ile csv eklenecek veya tek df oluşturmak ve eklemek gerekir bunun için ve döngü dışında bir şey yazın:

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 

Dosya açmak ve dosyayı açmak daha iyi bir seçenek olabilir. to_csv nesne:

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 

Ben temelde olarak bırakmak istiyorum düşünüyorum: Eğer karakter üzerinde dolaşır, böylece değer olarak tek bir sicim dataPack geçen from_records kullanarak çünkü

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) 

Tek tek karakter olsun Bir tuple dataPack = (s, l, p,c, r) ve pd.DataFrame(dataPack) kullanın. Gerçekten pandalara ihtiyacınız yok, csv lib Dataframes oluşturmaya gerek kalmadan tüm bunları sizin için yapar.

+0

Çalışılan bir dosyayı açın, csv'deki tüm öğrencilerin verilerini görüntüler. Girdiğin için teşekkürler, takdir et. Csv'de üstbilgiyi atlar, ancak ilk sütunlar 0'dan oluşur. Sütun yapısını doğru yapmak için değişiklik yapmak zorunda kalacağım. – MrPool

+0

Panda'ları kullanmam için talimat verildim, bu yüzden gelecekte verilerin MySQL'e aktarılması daha kolay olurdu. – MrPool

+0

Csv üstbilgisini dosyadan kullanmak veya kendi kişisel yaratıcılığınızı yaratmak için –

İlgili konular