【问题标题】:elements from a list to dataframe names for export列表中的元素到要导出的数据框名称
【发布时间】:2021-06-27 02:07:44
【问题描述】:

我有一个数据框名称列表

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)

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

【问题讨论】:

  • 您是如何获得这些数据框的名称的?它可能应该是dictname : dataframe
  • 数据框列表来自识别本地文件夹中丢失的文件的过程,完成后我想导出数据框作为这个过程的结果,所以我想出了有一个列表,但是当我将它设置为一个一个时:for f in missing_file: f.to_excel(output_lib + "\\" + f + '.xlsx', index=False),数据框的名称是获取为字符串,找不到让python将其读取为数据框名称的方法

标签: python list dataframe names


【解决方案1】:

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

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

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

避免在代码中使用“list”,因为 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)

【讨论】:

  • 非常感谢,我尝试了您建议的方式,但始终显示相同的错误:“AttributeError: 'str' object has no attribute 'to_excel'”
  • 你需要有一个 Pandas 数据框,而不仅仅是一个字符串。因此,如果您只有数据框的名称,那只是一个字符串,所以这是行不通的。您是否从可以使用的数据框开始?
【解决方案2】:

有一个列表

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,我从字典中创建了一个临时数据框,它的文件已经存在,它将打开文件并将数据框导出到工作表中,否则如果文件没有如果不存在,只需将数据框导出为路径中的新文件即可:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2021-10-18
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2014-04-09
    • 2015-03-27
    相关资源
    最近更新 更多