【问题标题】:How to read a lot of excel files in python pandas?如何在 python pandas 中读取大量 excel 文件?
【发布时间】:2020-02-09 08:35:42
【问题描述】:

我有很多 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()

感谢阅读。

【问题讨论】:

    标签: python pandas macros


    【解决方案1】:

    鉴于之后您可能希望以某种方式同时处理所有数据帧,如果您甚至将它们放入单独的局部变量中,这会很麻烦,而且通常,每当您遇到“此任务感觉重复,因为我一遍又一遍地做同样的事情”,这需要引入某种循环。当您计划使用 pandas 时,您很可能很快会再次进行迭代(现在您已经有了文件,您可能会对这些文件的行执行一些转换),在这种情况下,您一般来说,最好研究一下控制流 a la loops 在 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')))
    

    【讨论】:

    【解决方案2】:

    您可以使用 python 中的OS 模块。它有一个方法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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 2018-09-14
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多