使用熊猫在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 中使用File
或file
作为任何类型的变量名,因为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文件的主要内容,如果未能解决你的问题,请参考以下文章