如何用数据框创build不确定长度的Excel电子表格?

我是一个Python用户的新用户,我一直在写一个程序,我需要创build一个不确定数量的列的Excel电子表格。 所以我之前的代码创build了4列:

writer = pd.ExcelWriter(datapath + 'Test#' + str(testcount) + '.xlsx', engine = 'xlsxwriter') df1 = pd.DataFrame({'Species 1' : evolution[0]}) df2 = pd.DataFrame({'Species 2' : evolution[1]}) df3 = pd.DataFrame({'Species 3' : evolution[2]}) df4 = pd.DataFrame({'Species 4' : evolution[3]}) df1.to_excel(writer, sheet_name='Raw Data') df2.to_excel(writer, sheet_name='Raw Data', startcol=2, index=False) df3.to_excel(writer, sheet_name='Raw Data', startcol=3, index=False) df4.to_excel(writer, sheet_name='Raw Data', startcol=4, index=False) writer.save() 

(Evolution是一个独立的函数,我可以从中绘制数据来填充列)。所以上面的代码完全按照需要工作。 我尝试创build一个不确定数量的列的方法是这样的:

 writer = pd.ExcelWriter(datapath + 'Test#' + str(testcount) + '.xlsx', engine = 'xlsxwriter') def do(x): and1 = x+1 "df" + str(and1) = pd.DataFrame({"Species " + str(i) : evolution[x]}) def do2(x): and1 = x+1 "df" + str(and1).to_excel(writer, sheet_name='Raw Data', startcol=and1, index=False) def repeat(times, f): for i in range(times): f() repeat(colnumb, do) repeat(colnumb, do2) writer.save() 

(“colnumb”是一个预定义的variables。)但是,这继续输出以下错误:

 "df" + str(and1) = pd.DataFrame({"Species " + str(i) : evolution[x]}) ^ SyntaxError: can't assign to operator 

如果有人能帮我看看我的尝试解决scheme有什么问题,或者说明一个更好的方法来实现我的目标,我将非常感激。 (如果我弄乱了格式,也很抱歉,这是我第一次在这里发表一个问题,所以如果我弄乱了一些约定,请让我知道。)

我想你已经过度devise了这个。 你得到的语法错误是因为你试图创builddynamicvariables名来存储每个dataframe,但是你不能在expression式中存储一个值(即str(and1)不能保存pd.DataFrame({"Species " + str(i) : evolution[x-1]})返回的值pd.DataFrame({"Species " + str(i) : evolution[x-1]}) 。谢天谢地,这个操作是不必要的,所以我们来看看其余的代码。

首先,您可以将所有函数组合到一个迭代中,以便只遍历一次列,然后执行该列的所有必要操作。 这是最好的执行字典的理解。 其次,看起来你正在使用DataFrame来保存Series对象。 实际上,您可以在将其全部导出到Excel之前创build整个数据框。

您在repeat()调用中调用colnumbvariables,但是我不确定它来自哪里,因为您还没有创build任何带有列的数据框。 这是evolution的长度吗? 另外,你可以称为evolution是一个函数,但是它与一个存储先前运行函数结果的列表进行交互。 我将为这两种情况提供解决scheme。 一个更简单,更高效的版本将如下所示:

  1. 如果colnumb是你input的任意数字

     # Create a dictionary with all columns of dynamic Species names storing the relevant value of evolution. species_dict = {'Species {}'.format(i) : [evolution[i]] for i in range(colnumb)} # Turn that dict into a dataframe df = pd.DataFrame(species_dict) # Output the dataframe to Excel df.to_excel(datapath + 'Test#' + str(testcount) + 'xlsx', 'Raw Data') 
  2. 如果colnumb真的只是进化的长度:

     # Create dict by enumerating all values of evolution to access both index and value species_dict = {'Species {}'.format(i): [value] for i, value in evolution.items()} # Convert dict to dataframe df = pd.DataFrame(species_dict) # Output the dataframe to Excel df.to_excel(datapath + 'Test#' + str(testcount) + 'xlsx', 'Raw Data') 

您可以创build一个包含所有列的数据框并将其导出:

 data = {'Species 1' : evolution[0], 'Species 2' : evolution[1], 'Species 3' : evolution[2], 'Species 4' : evolution[3]} writer = pd.ExcelWriter(datapath + 'Test#' + str(testcount) + '.xlsx', engine = 'xlsxwriter') df = pd.DataFrame(data) df.to_excel(writer, sheet_name='Raw Data') writer.save() 

这是你的问题?