Python3 Pandas - 基于对象数组创建新的DataFrame

时间:2017-07-26 20:30:01

标签: python excel python-3.x pandas

我有一个对象数组。我试图遍历该数组并创建一个新的数据帧,然后将其保存到电子表格中。

我的对象变量是这样的:

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 QuestionQuestion 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时,它是空的,并且在电子表格中它有列但其余的数据都丢失了。我究竟做错了什么?感谢您提供的任何帮助!

1 个答案:

答案 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()