列表中的元素到要导出的数据框名称

elements from a list to dataframe names for export

我有一个数据帧名称列表

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' 对应于列表中数据框的索引,而不是原来的 'one'、'two' ...

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

避免在代码中使用 'list',因为列表在 Python 中已经有含义了——所以我们称它为 'list_of_dfs'.

此外,范围默认从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, df1, 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,我从字典中创建了一个临时数据框,它的文件已经存在,它将打开文件并导出数据框进入 sheet,否则如果文件不存在,它将简单地将数据框导出为路径中的新文件:

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)