Импорт нескольких файлов excel и объединение в фреймворк данных

Я пытаюсь импортировать много файлов Excel (около 400) в один фрейм данных из папки, но, похоже, у меня возникает ошибка.

Файлы, которые я хочу найти в своей папке, имеют имя файла, за которым следует дата — «имя_файла_гггг_мм_дд.xlsx».

Я хочу сохранить заголовок, так как файлы имеют одинаковые столбцы для разных дат.

Мой текущий код:

import glob
import pandas as pd
import os


path = r"C:\Users\..."

my_files = glob.glob(os.path.join(path, "filename*.xlsx"))

file_li = []

for filename in my_files:
    df = pd.read_excel(filename, index_col=None, header=1)
    file_li.append(df)
    
frame = pd.concat(file_li, axis=0, ignore_index=True)

Когда я вызываю свой кадр, я не получаю никакого ответа? Я что-то не так делаю, называя имя файла?

Обновлять:

Мои файлы excel выглядят так:

Колонка 1 Колонка 2 Колонка 3 Колонка 4 Колонка 5 Колонка 6 Колонка 7 Колонка 8 Колонка 9 Колонка 10 Колонка 11 Колонка 12 Колонка 13 Колонка 14 Дата СРЭК-МД СРЭК 25 февраля многомерные выражения Ф 85 0 0 8086 25.02.2025 20107

около 300-400 рядов.

Мой вывод захватил 14 столбцов, но добавил намного больше, так как выполнение frame.info() показывает, что у меня есть 922 столбца.

Обновление 2:

Когда я вызываю свой кадр, я не получаю никакого ответа? Что ты имеешь в виду ?

Timeless 25.11.2022 16:34

Сначала он не запускался, но теперь он работает с неправильным выводом... он добавил дополнительные числовые столбцы, которых нет в файле.

Chetan Patel 25.11.2022 17:03

Можете ли вы показать, как выглядит ваш ввод (один из файлов Excel) и (неправильный) вывод?

Timeless 25.11.2022 17:04

Добавил в исходный пост, спасибо

Chetan Patel 25.11.2022 17:10

Я не могу воспроизвести проблему на своей машине с вашим кодом. Можете ли вы проверить, не содержат ли ваши электронные таблицы скрытые столбцы? Также может быть лучше, если вы добавите скриншот неправильного вывода.

Timeless 25.11.2022 17:18

обязательно - добавил. В листах Excel нет скрытых столбцов, но я понял, что он начинается не с строки 1 в Excel, а со строки 2. Однако у него такое же количество столбцов. Следовательно, я не знаю, почему мой df имеет 922 столбца с приведенным выше кодом.

Chetan Patel 25.11.2022 17:29

Можно поставить header=None? (это не даст вам окончательный ожидаемый результат, а просто убедитесь, что лишние столбцы исчезнут)

Timeless 25.11.2022 17:33

Да! Это сработало. Теперь я думаю, что мне нужно решить эту проблему, чтобы переместить вторую строку, чтобы она стала заголовком столбца.

Chetan Patel 25.11.2022 17:38

Хорошо, и не забывайте, что строка 2 в Excel эквивалентна header=1 в пандах. Поэтому убедитесь, что все файлы Excel, рабочие листы имеют заголовок, начинающийся со строки 2 в Excel, а затем установите header=1.

Timeless 25.11.2022 17:41

Сначала у меня было это, и именно тогда я получил 922 строки. Только никто не получает правильное количество столбцов

Chetan Patel 25.11.2022 18:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
10
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вместо использования concat вы можете попробовать прочитать файлы в df, а затем добавить их в один комбинированный csv, используя mode='a'. Затем прочитайте объединенный csv.

for filename in my_files:
       df = pd.read_excel(filename, index_col=None, header=1)
       df.to_csv('combined.csv', mode='a', header=False)


df = pd.read_csv('combined.csv')
Ответ принят как подходящий

Трудно сказать, почему вы получаете дополнительные столбцы, но вы можете попробовать это:

import glob
import pandas as pd
import os


path = r"C:\Users\..."

my_files = glob.glob(os.path.join(path, "filename*.xlsx"))

file_li = []

for filename in my_files:
    df = pd.read_excel(filename, index_col=None, header=None)
    file_li.append(df)
    
frame = (
            pd.concat(file_li, axis=0, ignore_index=True)
                .dropna(how = "all") #to get rid of the eventual extra rows abobe each header
                .drop_duplicates() #to get rid of the cumulated duplicated headers
                .T.set_index(0).T #to make the first row as header of the dataframe
        )

Тем не менее, я предлагаю вам проверить, есть ли в frame пропущенные строки по сравнению с вашими электронными таблицами.

Другие вопросы по теме