我有一个对象数组。我试图遍历该数组并创建一个新的数据帧,然后将其保存到电子表格中。
我的对象变量是这样的:
def __init__(self, question, total):
self.question = str(question)
self.total = float(total)
self.answers = {}
question
是问题文字的字符串
total
是收到问题的总票数
answers
是一个字典,其中包含以下数据:{'Yes': 5, 'No': 2, 'Maybe': 1}
,答案选项的字符串和收到答案的投票数
我正在尝试遍历q_array
Question
个Question Answer Total Percent
What color is the sky? 22
Red 8 36.4%
Green 2 9.1%
Blue 12 54.5%
个对象,追加问题和总数,然后在下面的for循环中查看答案项并将其附加到其他行上。
这是所需的输出/表格:
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
添加新行并选择行中的数据。但是,当我打印key
时,它是空的,并且在电子表格中它有列但其余的数据都丢失了。我究竟做错了什么?感谢您提供的任何帮助!
答案 0 :(得分:0)
答案很简单:我需要将DataFrame设置为等于追加,而不是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()