【问题标题】:how to store answer into numpy array and use it to create an excel sheet?如何将答案存储到 numpy 数组中并使用它来创建 Excel 工作表?
【发布时间】:2020-05-02 00:45:30
【问题描述】:

我有一个包含两个函数的程序:test()outputEval() 以及一个主函数。 test() 函数包含 3 个列表值,我只是返回它们。 outputEval() 函数从测试函数中获取返回值并将它们存储到一个 numpy 数组中,我正在使用该数组来创建数据框以创建一个 Excel 工作表。 我的代码:

import numpy as np
import pandas as pd
def test():
    list1 = [1, 21, 12, 24, 54, 6]
    list2 = [65, 65, 3, 2, 5, 8]
    list3 = [65, 78, 87, 5, 2, 3]
    modelInput = {
        'list1': list1, 'list2': list2, 'list3': list3
    }
    return modelInput

def outputEval(modelInput):
    solArray = np.zeros(3)
    for i in range(0, solArray.shape[0]):
        solArray[i][0] = pd.Series(modelInput['list1'])
        solArray[i][1] = pd.Series(modelInput['list2'])
        solArray[i][2] = pd.Series(modelInput['list3'])

    df=pd.DataFrame(solArray, columns=['list1', 'list2', 'list3'])
    df.to_excel('testingfile.xlsx')
def main():
    testing = test()
    run = outputEval(testing)

main()

运行后出现的错误

TypeError: 'numpy.float64' object does not support item assignment

想要的输出

list1  list2  list3
 1      65     65
 21     65     78 
 12     3      87
 24     2      5  
 54     5      2
 6      8      3

【问题讨论】:

  • 你为什么用pd.Series
  • 因为列表的长度可能会有所不同
  • 仍然出现同样的错误
  • 仍然出现同样的错误

标签: python python-3.x pandas list numpy


【解决方案1】:

你不需要那个 for 循环

你可以使用:

def outputEval(modelInput):
    df=pd.DataFrame(modelInput, columns=['list1', 'list2', 'list3'])
    df.to_excel('testingfile.xlsx')
    #update...
    sol = df.to_numpy()
    print(sol)

如果您不想要 index 列,请使用 df.to_excel('testingfile.xlsx', index=False)

更新 1

def outputEval(modelInput):
    sol = np.c_[list(modelInput.values())].T
    df=pd.DataFrame(sol, columns=['list1', 'list2', 'list3'])
    df.to_excel('testingfile.xlsx', index=False)

更新 2 使用from itertools import chain

    modelInput = list(chain(modelInput1.values(), modelInput2.values()))
    print(modelInput)
    sol = np.c_[list(modelInput)].T

更新 3

sol = np.r_[np.r_[list(modelInput1.values())].T, np.r_[list(modelInput2.values())].T]    

【讨论】:

  • 我知道这种方法,但我需要先将答案存储在 numpy 数组中,因为这只是一个测试文件
  • 使用数据框中的to_numpy。立即查看答案
  • 实际上在实际程序中有多个文件返回不同的modelInputs,因此很难将其直接存储到DataFrame中。所以这就是为什么首先我想将它存储到一个 numpy 数组中。这就是为什么我只想先学习这个方法。
  • 假设如果我想在这个中添加另一个函数的另一个modelInput,那么怎么做呢?
  • 你的意思是如何添加到numpy数组?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多