AttributeError: объект 'list' не имеет атрибута 'to_excel' при добавлении DF в список и завершении сохранения этих DF в агрегированном файле с помощью openpyxl - PullRequest
0 голосов
/ 28 октября 2019

Я получаю сообщение об ошибке, когда хочу сохранить окончательный 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), я получаю «Все переданные объекты были None»


Некоторая справочная информация: фреймы данных выглядят так:

Заголовок

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

1 Ответ

0 голосов
/ 28 октября 2019

Я стал ближе, мне пришлось использовать 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()

У меня все еще остается одна проблема: кадры данных в конечном результате записываются в одну ячейку, что выглядит странно. Но обойдется отсюда, я полагаю, что-то не так с индексами, может быть ...

...