簡體   English   中英

使用熊貓在python中循環遍歷多個Excel文件

[英]Looping through multiple excel files in python using pandas

我知道這類問題一直都在問。 但是我在尋找最好的方法時遇到了麻煩。

我寫了一個腳本,使用pandas重新格式化單個excel文件。 效果很好。

現在,我想遍歷多個 excel文件,執行相同的重新格式化,並將每個excel工作表中新格式化的數據一個接一個地放置在底部。

我相信第一步是列出目錄中所有Excel文件的清單。 有很多不同的方法可以做到這一點,所以我很難找到最好的方法。

下面是我當前用於導入多個.xlsx並創建列表的代碼。

import os
import glob

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

我不確定以前的全局代碼是否實際創建了我需要的列表。

然后我很難理解從那里去哪里。 以下代碼在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.
'

任何幫助是極大的贊賞

我解決了我的問題。 我沒有使用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)

就是這樣,它可以完成我想要的一切。

你需要改變

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(...) ,因此您將一for FileList in glob.glob(...)遍歷該列表並將結果放入FileList 在循環的最后, FileList是一個文件名-一個字符串。

當您執行此代碼時:

for File in FileList:
    for x in File:

第一行會將File分配給最后一個文件名的第一個字符(作為字符串)。 第二行將x分配給File的第一個(也是唯一的)字符。 這不太可能是有效的文件名,因此會引發錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM