从列表到数据框名称的元素以供导出

问题描述

我有一个数据框名称列表

list = ['one','two','three','four']

我想导出它们:

for i in range (0,len(list)):
    with pd.ExcelWriter(output_path + '//' + 'file'+i+'.xlsx') as writer:
    list[i].to_excel(writer,index=False)

显示这个错误:AttributeError: 'str' object has no attribute 'to_excel'

基本上我需要:

for i in range (0,len(list)):
    with pd.ExcelWriter(output_path + '//' + 'file1'.xlsx') as writer:
    one.to_excel(writer,index=False)

并对列表中的所有元素执行此操作

解决方法

您将需要实际的数据框才能与 .to_excel 一起使用。如果你只有一个字符串,它会失败,因为你会要求 .to_excel 写字符串“one”,而不是你想用字符串“one”引用的数据框。

您可以拥有一个数据框列表并遍历它们,因此假设您获得了该数据框列表。我们还假设您使用与列表中数据框索引相对应的名称“0”、“1”、“2”,而不是您原来的“一”、“二”...

您在代码 'file' + i 中有 1 个小错误 -- 将索引 i(指向列表中的项目)与项目本身混淆。另外,注意整数与字符串——i 是整数,所以使用 str(i) 转换为字符串,以便它可以成为更大字符串的一部分。

避免在代码中使用“list”,因为 list 在 Python 中已经意味着某些东西——所以我们称之为“list_of_dfs”。

另外,range 默认从 0 开始,所以不需要指定。

因此,将所有这些放在一起,您可以使用以下任一方法:

list_of_dfs = [df0,df1,df2]       # assume you get the list of dfs

for i in range(len(list)):
    with pd.ExcelWriter(output_path + '//' + 'file'+ str(i) +'.xlsx') as writer:
        list_of_dfs[i].to_excel(writer,index=False)


for df in list_of_dfs:
    with pd.ExcelWriter(output_path + '//' + 'file' + str(list_of_dfs.index(df)) +'.xlsx') as writer:
        df.to_excel(writer,index=False)

,

有一个列表

list_of_dfs = [df0,df2]

我用数据框创建了一个字典(这是关键):

UniqueSource = df_raw.Key.unique()
DataFrameDict = {elem : pd.DataFrame for elem in UniqueSource}
for key in DataFrameDict.keys():
    DataFrameDict[key] = df_raw[:][df_raw.Key == key]

然后我创建了路径中所有文件的列表:

outlib = os.listdir(output_lib)
outlib_names = [s.replace(".xls","") for s in outlib]

最后通过检查 outlib_names 中的每个 list_of_dfs,我从字典中创建了一个临时数据框,它的文件已经存在,它将打开文件并将数据框导出到工作表中,否则如果文件不存在'如果不存在,只需将数据框导出为路径中的新文件即可:

for f in list_of_dfs:
        check = (f in outlib_names)
        if check is True:
            temp = DataFrameDict[f]
            with pd.ExcelWriter(output_lib + "\\" + f + '.xlsx',engine='openpyxl',mode='a') as writer:
                temp.to_excel(writer,sheet_name = "'" + f "'",index = False)
        else:
            temp = DataFrameDict[f]
            with pd.ExcelWriter(output_lib + "\\" + f + '.xlsx') as writer:
                temp.to_excel(writer,sheet_name="'" + f + "'",index=False)