【问题标题】:AttributeError: 'list' object has no attribute 'to_excel' when appending DF's to list, and concating those DF's save to aggregated file with openpyxlAttributeError: 'list' 对象在将 DF 附加到列表时没有属性 'to_excel',并将这些 DF 保存到带有 openpyxl 的聚合文件
【发布时间】:2020-02-23 08:20:41
【问题描述】:

当我想将最终的 DataFrame 保存到 excel 文件时出现错误:

for filename in path.glob('**/*.xlsx'):
[...]
[... omitted code, will share, if interest exists]
[...]
    print('Processing : ' + str(filename))
    try:
        data = pd.read_excel(filename, sheet_name='Main Sheet', header=None)
        new_row = pd.DataFrame([[str(filename), str(now)]],
                               index=[0])
        # simply concatenate both dataframes
        data = pd.concat([new_row, data]).reset_index(drop=True, inplace=True)

        appended_data.append(data)
        appended_data = pd.concat(appended_data, sort=False, ignore_index=True)
    except Exception as e:
        print(e)
        print('Couldn\'t process ' + str(filename) + ' ! ')
    copy('C:\\Users\\**YOU**\\' + str(filename), (os.path.expanduser(
        '~/') + '\\**CLOUD'))
    os.remove('C:\\Users\\**YOU**\\' + str(filename))

except Exception as e:
    print('Error! Error!: ' + str(e) + str(e.args))

循环之后:

appended_data.to_excel('appended.xlsx')
book = load_workbook('appended2.xlsx')
writer = pd.ExcelWriter('appended2.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}
startrow = writer.sheets['Sheet1'].max_row
appended_data.to_excel(writer, startrow=startrow, index=False, header=False)
writer.save()

“AttributeError: 'list' 对象没有属性 'to_excel'” 发生在倒数第二行。 我很困惑,因为代码在我对循环进行一些“改进”之前就已经工作了。 如何将列表转换为数据框? 当我尝试一个简单的 df = pd.DataFrame(appended_data) 我得到一个“所有传递的对象都没有”


一些背景信息: 数据框如下所示:

标题

Eaten this month    Ordered Self-made   Eaten out

Pizza   20  5   7   8
Pasta   10  1   8   1
Sushi   5       0   N/A
Chinese 15  14  1   N/A

标题被删除,聚合数据写入名称和日期 附加数据(最终结果):

Wight    2019/10/28
Pizza   20  5   7   8
Pasta   10  1   8   1
Sushi   5       0   N/A
Chinese 15  14  1   N/A
Olufsson    2019/10/27
Pizza   20  5   7   8
Pasta   10  1   8   1
Sushi   5       0   N/A
Chinese 15  14  1   N/A

【问题讨论】:

  • 看着 appended_data.append(data) ,我假设 appended_data 是一个列表,并且列表没有 to_excel 方法你打算做一个 for data in appended_data: ... 吗?
  • 这个想法是 'appended_data = pd.concat(appended_data, sort=False, ignore_index=True)' 在不需要另一个循环的情况下附加数据帧

标签: python pandas openpyxl


【解决方案1】:

我离得更近了,我不得不使用 append 而不是 concat。我也将操作移到了它里面的循环之后。

data = new_row.append(data, ignore_index=True)
            appended_data.append(data)
            try:
                new_append = appended_data.append(data)
            except:
                print('Could\'nt append multiple df\'s')
            try:
                appended_data = pd.concat(new_append.reset_index(drop=True), sort=False, ignore_index=True, axis=1)
            except:
                pass
            df = pd.DataFrame(appended_data)
            df.to_excel('appended.xlsx')
            book = load_workbook('appended2.xlsx')
            writer = pd.ExcelWriter('appended2.xlsx', engine='openpyxl')
            writer.book = book
            writer.sheets = {ws.title: ws for ws in book.worksheets}
            startrow = writer.sheets['Sheet1'].max_row
            df.to_excel(writer, startrow=startrow, index=False, header=False)
            writer.save()

我还有一个问题: 最终结果中的数据帧被写入一个单元格,这看起来很奇怪。 但是我想会从这里开始管理,索引可能有问题......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 2021-04-04
    • 2021-05-21
    • 1970-01-01
    • 2020-06-06
    • 2019-01-01
    • 2022-11-25
    • 2022-08-12
    相关资源
    最近更新 更多