Как читать много файлов Excel в пандах Python?

У меня много файлов Excel (в формате xlsx), и я хочу прочитать и обработать их.

Например, имена файлов: ex201901, ex201902, .... 201912.

Его название составлено в формате exYYYYMM.

В любом случае, импортировать эти файлы в панды, как обычно, легко.

import pandas as pd

df201901 = pd.read_excel(r'C:\usersex201901.xlsx)
df201902 = pd.read_excel(r'C:\usersex201902.xlsx)
df201903 = pd.read_excel(r'C:\usersex201903.xlsx)
df201904 = pd.read_excel(r'C:\usersex201904.xlsx)
....
df201912 = pd.read_excel(r'C:\usersex201912.xlsx)

Тем не менее, это кажется скучным и скучным.

В программе SAS я использую синтаксис Macro () . Но в Python я понятия не имею, как справиться.

Можете ли вы помочь мне, как легко обрабатывать многократные и повторяющиеся задания, например, SAS MACRO () .

Спасибо за прочтение.

Всего 2 ответа


Учитывая, что вы, вероятно, захотите как-то работать со всеми фреймами данных сразу после этого, будет неприятно, если вы даже поместите их в отдельные локальные переменные, и в целом, всякий раз, когда вы испытываете «эту задачу, кажется повторяющейся, потому что я делать одно и то же снова и снова ", что требует введения каких-то циклов. Поскольку вы планируете использовать панды, есть вероятность, что вы скоро снова будете выполнять итерации (теперь, когда у вас есть ваши файлы, вы, вероятно, будете выполнять некоторые преобразования в строках этих файлов), и в этом случае вы ' Вероятно, лучше всего будет посмотреть, как поток управления а-ля циклы работает в Python (и, действительно, в пандах) в целом; хорошие учебники в изобилии.

В вашем конкретном случае, в зависимости от того, какую обработку вы планируете делать впоследствии, вам, вероятно, будет полезно иметь что-то вроде

df2019 = [pd.read_excel(rf'C:usersex2019{str(i).zfill(2)}.xlsx') for i in range(1, 13)]

При этом вы можете получить доступ к отдельным фреймам данных, например, через df2019[5] чтобы получить фрейм данных, соответствующий июню, или вы можете свернуть все их в один фрейм данных, используя df = pd.concat(df2019) если это подходит твоя потребность

Если у вас меньше структур в именах файлов, вам может пригодиться glob . С этим, выше может стать что-то вроде

import glob
df2019 = list(map(pd.read_excel, glob.glob(r'C:usersex2019*.xlsx')))

Вы можете использовать модуль ОС из Python. У него есть метод listdir, который хранит все имена файлов в папке. Проверьте код ниже:

import os, re
listDir = os.listdir(FILE_PATH)
dfList = []
for aFile in listDir:
    if re.search(r'ex20190[0-9]{1}.xlsx', aFile):
        tmpDf = pd.read_excel(FILE_PATH + aFile)
        dfList.append(tmpDf)

outDf = pd.concat(dfList)

Есть идеи?

10000