Python3熊猫 - 基于对象数组创建新的数据框
问题描述:
我有一个对象数组。我试图循环访问该数组并创建一个新的数据框,然后将其保存到电子表格中。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
它是空的,并在电子表格中它有列,但其余的数据丢失。我究竟做错了什么?感谢您提供的任何帮助!
答
答案很简单:而不是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()