Я пытаюсь импортировать много файлов 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 выглядят так:
около 300-400 рядов.
Мой вывод захватил 14 столбцов, но добавил намного больше, так как выполнение frame.info() показывает, что у меня есть 922 столбца.
Обновление 2:
Сначала он не запускался, но теперь он работает с неправильным выводом... он добавил дополнительные числовые столбцы, которых нет в файле.
Можете ли вы показать, как выглядит ваш ввод (один из файлов Excel) и (неправильный) вывод?
Добавил в исходный пост, спасибо
Я не могу воспроизвести проблему на своей машине с вашим кодом. Можете ли вы проверить, не содержат ли ваши электронные таблицы скрытые столбцы? Также может быть лучше, если вы добавите скриншот неправильного вывода.
обязательно - добавил. В листах Excel нет скрытых столбцов, но я понял, что он начинается не с строки 1 в Excel, а со строки 2. Однако у него такое же количество столбцов. Следовательно, я не знаю, почему мой df имеет 922 столбца с приведенным выше кодом.
Можно поставить header=None
? (это не даст вам окончательный ожидаемый результат, а просто убедитесь, что лишние столбцы исчезнут)
Да! Это сработало. Теперь я думаю, что мне нужно решить эту проблему, чтобы переместить вторую строку, чтобы она стала заголовком столбца.
Хорошо, и не забывайте, что строка 2 в Excel эквивалентна header=1
в пандах. Поэтому убедитесь, что все файлы Excel, рабочие листы имеют заголовок, начинающийся со строки 2 в Excel, а затем установите header=1
.
Сначала у меня было это, и именно тогда я получил 922 строки. Только никто не получает правильное количество столбцов
Вместо использования 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
пропущенные строки по сравнению с вашими электронными таблицами.
Когда я вызываю свой кадр, я не получаю никакого ответа? Что ты имеешь в виду ?