使用熊猫在python中循环多个excel文件

Posted

技术标签:

【中文标题】使用熊猫在python中循环多个excel文件【英文标题】:Looping through multiple excel files in python using pandas 【发布时间】:2016-09-20 16:34:57 【问题描述】:

我知道一直有人问这种类型的问题。但是我很难找出最好的方法来做到这一点。

我编写了一个脚本,它使用 pandas 重新格式化单个 excel 文件。 效果很好。

现在我想循环遍历多个个excel文件,执行相同的重新格式化,并将每个excel表中新重新格式化的数据一个接一个地放在底部。

我相信第一步是列出目录中所有的 excel 文件。 有很多不同的方法可以做到这一点,所以我很难找到最好的方法。

以下是我目前用于导入多个 .xlsx 并创建列表的代码。

import os
import glob

os.chdir('C:\ExcelWorkbooksFolder')
for FileList in glob.glob('*.xlsx'):
         print(FileList)

我不确定之前的 glob 代码是否真的创建了我需要的列表。

然后我很难理解从那里去哪里。 下面的代码在pd.ExcelFile(File) 处失败 我相信我错过了一些东西......

# create for loop
for File in FileList:
    for x in File:
# Import the excel file and call it xlsx_file
xlsx_file = pd.ExcelFile(File)
xlsx_file
# View the excel files sheet names
xlsx_file.sheet_names
# Load the xlsx files Data sheet as a dataframe
df = xlsx_file.parse('Data',header= None)
# select important rows,
df_NoHeader = df[4:]
#then It does some more reformatting.
'

非常感谢任何帮助

【问题讨论】:

检查缩进。 Python 中的空格和缩进很重要。此外,您应该避免在 python 中使用Filefile 作为任何类型的变量名,因为file 是内置的。 谢谢!那是个问题。 【参考方案1】:

你需要改变

os.chdir('C:\ExcelWorkbooksFolder')
for FileList in glob.glob('*.xlsx'):
         print(FileList)

只是

os.chdir('C:\ExcelWorkbooksFolder')
FileList = glob.glob('*.xlsx')
print(FileList)

为什么这会解决它? glob 返回一个列表。既然您输入了for FileList in glob.glob(...),您将一个一个地遍历该列表并将结果放入FileList。在循环结束时,FileList 是一个文件名 - 一个字符串。

当您执行此代码时:

for File in FileList:
    for x in File:

第一行会将File 分配给最后一个文件名的第一个字符(作为字符串)。第二行将x 分配给File 的第一个(也是唯一一个)字符。这可能不是有效的文件名,因此会引发错误。

【讨论】:

啊,当然可以。谢谢。但我想我仍然无法理解 glob 函数。我花了更多时间处理代码并使用 os.listdir 来解决我的问题。不过感谢您的帮助! os.listdir 通常绰绰有余(并且适合您的情况)-它列出了目录中的每个文件,您可以自己过滤。 glob 在您需要 ls */*.xls 之类的时候很有用 - 即您想要匹配通配符,尤其是作为路径的一部分。你可以用os.walk 做到这一点,但这更难; glob 只是返回所有匹配路径的平面列表,很方便。 谢谢,我明白了!【参考方案2】:

我解决了我的问题。我没有使用 glob 函数,而是使用 os.listdir 来读取我所有的 excel 表,循环遍历每个 excel 文件,重新格式化,然后将最终数据附加到表的末尾。

#first create empty appended_data table to store the info.
appended_data = []


for WorkingFile in os.listdir('C:\ExcelFiles'):
     if os.path.isfile(WorkingFile):

        # Import the excel file and call it xlsx_file
        xlsx_file = pd.ExcelFile(WorkingFile)
        # View the excel files sheet names
        xlsx_file.sheet_names
        # Load the xlsx files Data sheet as a dataframe
        df = xlsx_file.parse('sheet1',header= None)

        #.... do so reformating, call finished sheet reformatedDataSheet
        reformatedDataSheet
        appended_data.append(reformatedDataSheet)
appended_data = pd.concat(appended_data)

就是这样,它可以满足我的所有需求。

【讨论】:

以上是关于使用熊猫在python中循环多个excel文件的主要内容,如果未能解决你的问题,请参考以下文章

我如何在python中使用for循环制作熊猫数据框对象

如何在循环中附加多个熊猫数据框?

打开多个Excel文件以分离熊猫数据框

使用熊猫时python中的嵌套循环问题

使用for循环(Python)追加/连接多个excel数据集

根据值合并行(熊猫到 excel - xlsxwriter)