遍历多个Excel文件,使用python

时间:2019-01-24 15:32:46

标签: python excel pandas openpyxl

问题::我想遍历Excel文件并提取特定值并保存到数据框。

原因:这有助于质量检查过程,通过循环,我可以将所有报告拉到一个文件夹中并快速保存关键数据点。当前过程包括打开每个文件,并将某些单元格复制并粘贴到“ Master QA” xlsx文件中

示例:一个文件夹中有三个文件 enter image description here

它们都具有两个数据点Datecount单元格B4和具有数据点的单元格C4

Two data points for each file

我们可以使用openpyxl

为每个文件打印每个数据点
import os 
import openpyxl
import pandas as pd

path=r"C:\Users\Desktop\StackOverflow"
os.chdir(path)

for resi_files in os.listdir(path):
     if os.path.isfile(resi_files):
                myworkbook=openpyxl.load_workbook(resi_files)
                worksheet= myworkbook['Sheet1']
                print(resi_files)
                print("Date")
                print(worksheet.cell(4, 2).value)
                print("count")
                print(worksheet.cell(4, 3).value)

这将为我们提供以下输出:

enter image description here

但是!这对我们没有任何好处,我们希望能够比较不同的单元格以进行质量检查。因此,我们需要将这些值保存到数据框中。

2 个答案:

答案 0 :(得分:0)

要保存到数据框,我们必须执行以下操作:

import os 
import openpyxl
import pandas as pd
import numpy as np #added to save count as a number

path=r"C:\Users\Desktop\StackOverflow"
os.chdir(path)

merged=pd.DataFrame()
for resi_files in os.listdir(path):
     if os.path.isfile(resi_files):
                myworkbook=openpyxl.load_workbook(resi_files)
                worksheet= myworkbook['Sheet1']
                data = pd.DataFrame(data=[worksheet.cell(4, 2).value], columns= ['Date'])
                data['count'] = np.array([worksheet.cell(4, 3).value])
                    # to grab a different cell, change the 4 and 3 
                    # 4 means 4 rows down, 3 is 3 columns over, not indexed at 0
                merged=pd.concat([merged,data])

通过打印merged,我们看到了一个易于使用的数据框。

答案 1 :(得分:0)

查理·克拉克(Charlie Clark)上面提到的解决方案并不是我所需要的。我需要获取特定的单元格,因为我正在使用的Excel文档的格式很多。但是,如果您具有更好格式的Excel工作表,这是一个价值解决方案。这是适合查理建议的经过修改的代码

import os 
import openpyxl
import pandas as pd
import numpy as np

path=r"C:\Users\Desktop\StackOverflow"
os.chdir(path)

merged=pd.DataFrame()
for resi_files in os.listdir(path):
     if os.path.isfile(resi_files):
                myworkbook=openpyxl.load_workbook(resi_files)
                worksheet= myworkbook['Sheet1']
                data = pd.DataFrame(worksheet.values)
                merged=pd.concat([merged,data])

print(merged)

这将在上述特定情况下为我们提供此输出:

enter image description here