#python #excel #pandas #for-loop #import-from-excel
#python #excel #панды #для цикла #импорт из Excel
Вопрос:
Я пытаюсь создать цикл, который будет считывать каждый файл Excel и выполнять вычисления над ними.
Что у меня есть, так это:
n=150
for i in range(n):
dw = pd.read_excel(str(i) '.xlsx')
print(dw)
(После этого я выполняю вычисления над ними — я просто распечатал результат, чтобы проверить, правильно ли он импортировал файлы)
Однако, когда я запускаю это, запускается последний файл Excel (файл с именем 150.xlsx ) 150 раз. (Вместо каждого из файлов по одному разу.)
Есть ли способ обойти это?
Комментарии:
1. Вы не сможете добраться до 150? Он будет выполняться от 0 до 149. Попытка изменить n на 151
2. приведенный выше код должен работать.
print (i)
для подтверждения значений итерации. вы могли бы добавитьdw = pd.read_excel(str(n) '.xlsx')
правильную проверку запущенного кода.3. Спасибо! Я проверил, и он все еще не работает должным образом. В PyCharm тоже — любая другая возможная причина для этого, которую вы, возможно, знаете?
Ответ №1:
Как уже говорил Мохамед, ваш код должен работать нормально, возможно, вы случайно написали pd.read_excel(str(n) '.xlsx')
вместо этого.
Кроме того, вы можете использовать os.walk
для перечисления всех файлов в каталоге и вместо этого использовать имена файлов:
import os
path = '<your path to excel files>'
files = []
# getting all files in directory
for (dirpath, dirnames, filenames) in os.walk(path):
files.extend(filenames)
# opening every .xlsx file and performing calculations
for f in files:
if f.endswith('.xlsx'):
dw = pd.read_excel(os.path.join(path, f))
# your calculation here
Комментарии:
1. Спасибо! Характер моих вычислений делает функцию read_excel более подходящей (вычисления требуют, чтобы я ссылался на предыдущие вычисления на основе того же имени индекса папки ie. ‘i’.) Хм, мне кажется странным, что и вы, и Мохаммед говорите, что это должно работать, но это не так — как на pycharm, так и на python. Может ли быть другое объяснение этому?
2. Я отредактировал свой ответ, чтобы использовать
read_excel()
функцию сейчас, надеюсь, это поможет. Что касается другой проблемы, я попробовал ее локально, и у меня не было проблем. Я создал 4 файла xlsx с именами1.xlsx
to4.xlsx
, каждый из которых содержит «Это <число>» в качестве данных и использовал именно ваш код без каких-либо ошибок. Этому есть несколько объяснений, возможно, ваши данные случайно совпадают, может быть, что-то еще. Но приведенный вами сокращенный код на 100% верен. Если вы можете поделиться фактическим сценарием, над которым вы работаете, возможно, я смогу помочь немного больше.