Как читать много файлов Excel в python pandas? - PullRequest
0 голосов
/ 09 февраля 2020

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

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

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

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

import pandas as pd

df201901 = pd.read_excel(r'C:\\users\ex201901.xlsx)
df201902 = pd.read_excel(r'C:\\users\ex201902.xlsx)
df201903 = pd.read_excel(r'C:\\users\ex201903.xlsx)
df201904 = pd.read_excel(r'C:\\users\ex201904.xlsx)
....
df201912 = pd.read_excel(r'C:\\users\ex201912.xlsx)

Однако, это кажется скучным и утомительным .

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

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

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

Ответы [ 2 ]

3 голосов
/ 09 февраля 2020

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

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

df2019 = [pd.read_excel(rf'C:\users\ex2019{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:\users\ex2019*.xlsx')))
0 голосов
/ 09 февраля 2020

Вы можете использовать OS модуль из 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...