【问题标题】:Python3 Pandas - Create new DataFrame based on array of objectsPython3 Pandas - 基于对象数组创建新的 DataFrame
【发布时间】:2017-07-26 20:30:01
【问题描述】:

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

我的对象变量是这样的:

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

【问题讨论】:

    标签: python excel python-3.x pandas


    【解决方案1】:

    答案很简单:我需要将 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()
    

    【讨论】:

      猜你喜欢
      • 2020-07-13
      • 2021-12-30
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2019-02-08
      • 1970-01-01
      • 2022-01-09
      相关资源
      最近更新 更多