2017-07-26 18 views
0

私はオブジェクトの配列を持っています。私はその配列をループし、新しいデータフレームを作成し、それをスプレッドシートに保存しようとしています。Python3 Pandas - オブジェクトの配列に基づいて新しいDataFrameを作成する

マイオブジェクト変数は、このようなものです:

def __init__(self, question, total): 
    self.question = str(question) 
    self.total = float(total) 
    self.answers = {} 

questionは、質問テキスト

totalの文字列で、質問は

answersを受け、総投票数は含む辞書ですデータは次のようになります。{'Yes': 5, 'No': 2, 'Maybe': 1}、回答の選択肢の文字列、回答が得られた投票数の数字

Questionオブジェクトをループし、質問と合計を追加してから、次にforループで回答項目を調べ、追加行に追加します。ここで

は、所望の出力/シートです:

Question    Answer Total Percent 
What color is the sky?   22  
         Red  8  36.4% 
         Green  2  9.1% 
         Blue  12  54.5% 

ここに私の現在のコードです:

writer = pd.ExcelWriter('master.xlsx') 

sdf = pd.DataFrame(columns=('Question', 'Answer', 'Total', 'Percent')) 
for data in q_array: 
    sdf.append({'Question': data.get_question(), 'Total': data.get_total()}, ignore_index=True) 
    for answer, number in data.get_answers().items(): 
     sdf.append({'Answer': answer, 'Total': number, 'Percent': number_to_percent(number, data.get_total())}, ignore_index=True) 

sdf.to_excel(writer, 'stats', index=False) 

writer.save() 

私は新しい行を追加して、行に何が起こったデータを選択するために.append()を使用しようとしています。しかし、私がsdfを印刷すると、それは空で、スプレッドシートには列がありますが、残りのデータはありません。私は間違って何をしていますか?何か助けてくれてありがとう!

答えて

0

答えは簡単だった:代わりにsdf.append()の私はAPPENDに等しいデータフレームを設定するために必要な、それゆえsdf = sdf.append()

ここで正しいコードです:

writer = pd.ExcelWriter('master.xlsx') 

sdf = pd.DataFrame(columns=('Question', 'Answer', 'Total', 'Percent')) 
for data in q_array: 
    sdf = sdf.append({'Question': data.get_question(), 'Total': data.get_total()}, ignore_index=True) 
    for answer, number in data.get_answers().items(): 
     sdf = sdf.append({'Answer': answer, 'Total': number, 'Percent': number_to_percent(number, data.get_total())}, ignore_index=True) 

sdf.to_excel(writer, 'Stats', index=False) 

writer.save() 
関連する問題