代码之家  ›  专栏  ›  技术社区  ›  user3685918

如何在python pandas中读取大量的excel文件?

  •  0
  • user3685918  · 技术社区  · 5 年前

    我有很多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程序中,我使用 宏() 语法。但在python中,我不知道如何处理。

    你能帮我如何以简单的方式处理多个重复的工作吗,比如 SAS宏() .

    谢谢你的阅读。

    1 回复  |  直到 5 年前
        1
  •  3
  •   fuglede    5 年前

    考虑到你可能想在之后以某种方式同时处理所有数据帧,如果你甚至把它们放在单独的局部变量中,这是一种气味,一般来说,每当你遇到“这项任务感觉重复,因为我一遍又一遍地做同样的事情”时,这就需要引入某种循环。当你计划使用pandas时,你很可能很快就会再次迭代(既然你有了文件,你可能会对这些文件的行执行一些转换),在这种情况下,你最好研究一下la循环在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
  •  0
  •   Pulkit Jha    5 年前

    您可以使用 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)