2017-07-26 95 views
0

我有一个对象数组。我试图循环访问该数组并创建一个新的数据框,然后将其保存到电子表格中。Python3熊猫 - 基于对象数组创建新的数据框

我的目标变量是这样的:

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对象的q_array,追加问题和总数,然后在下面的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()我需要设置数据框等于追加,因此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()