Pandas根据列表列表命名多个工作表

时间:2016-09-10 10:26:53

标签: python excel pandas

我第一次在这里发帖,而且我是一个新手。

无论如何,我一直在玩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

1 个答案:

答案 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]