我第一次在这里发帖,而且我是一个新手。
无论如何,我一直在玩Pandas和Numpy从Excel做一些计算。
现在我想创建一个.xlsx文件,我可以输出我的结果,我希望每个工作表都以输出的数据帧的名称命名。
这是我的代码,我尝试了几种不同的解决方案,但我无法想象如何编写它。
在代码中你可以看到save_excel只是编号表(并且效果很好),而save_excelB尝试做我正在描述它的内容,但我无法让它工作。
from generate import A,b,L,dr,dx
from pandas import DataFrame as df
from pandas import ExcelWriter as ew
A=df(A) #turning numpy arrays into dataframes
b=df(b)
L=df(L)
dr=df(dr)
dx=df(dx)
C=[A,b,L,dr,dx] #making a list of the dataframes to iterate through
def save_excel(filename, item):
w=ew(filename)
for n, i in enumerate(item):
i.to_excel(w, "sheet%s" % n, index=False, header=False)
w.save()
def save_excelB(filename, item):
w=ew(filename)
for name in item:
i=globals()[name]
i.to_excel(w, sheet_name=name, index=False, header=False)
w.save()
我以与调用函数相同的方式运行两者并添加文件名,对于项目I,我插入了我已经创建的列表C.
所以它会是:
save_excelB("file.xlsx", C)
这就是我得到的
TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed
答案 0 :(得分:1)
您需要在函数中传递数据框名称的字符串文字,而不是实际的数据框对象:
C = ['A', 'b', 'L', 'dr', 'dx']
def save_excelB(filename, item):
w=ew(filename)
for name in item:
i=globals()[name]
i.to_excel(w, sheet_name=name, index=False, header=False)
w.save()
save_excelB("file.xlsx", C)
您甚至可以通过检查作为pandas数据框类类型的项目,动态创建当前位于全局环境中的所有数据框的 C :
import pandas as pd
...
C = [i for i in globals() if type(globals()[i]) is pd.core.frame.DataFrame]