2016-03-26 9 views
2

私は、学生をプロジェクトにリンクさせるアルゴリズムがあります。動作していて、データをCSVファイルにエクスポートするのに問題があります。最後の値だけを取り、それをエクスポートします。エクスポートする値が200個ある場合のみです。複数のデータ行をCSVにエクスポートするためにパンダを使用

エクスポートされたデータは、「s」を構成する3つの3つの数字ではなく、3つの列に分割された「s」全体を取得したいときに、それぞれの数値を値として使用します。私は以下の画像を添付しました。どんな助けもありがとう。

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') 

答えて

1

あなただけのデータの最後のビットで終わる、あなたはdf.to_csv('try.csv',mode="a",header=False)でCSVファイルに追加または1人のDFを作成して追加する必要があるので、あなたは、ループ内で上書きしておきます

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 

より良いオプションは、ファイルを開いてそのファイルを渡すことですto_csvへのオブジェクト:

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 

私はあなたが基本的に残したいと思う:あなたはそれが文字を反復処理して値として単一の文字列dataPackを渡すfrom_recordsを使用しているため

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) 

あなたは、個々の文字を取得しますタプルdataPack = (s, l, p,c, r)およびpd.DataFrame(dataPack)を使用してください。あなたは本当にパンダはまったく必要ありません、csvのlibはDataframesを作成する必要なく、すべてあなたのためにこれを行います。

+0

ファイルを開くと、csv内のすべての生徒のデータが表示されます。あなたのご意見ありがとうございます。 csvではヘッダーはスキップされますが、最初の列は0で構成されます。列構造を正しく変更するためには変更を加える必要があります。 – MrPool

+0

私はPandasを使用するように指示されています。将来的には、データをMySQLにエクスポートする必要があれば簡単になります。 – MrPool

+0

ファイルからcsvヘッダーを使用するか、自分で作成する –

関連する問題