问题::我想遍历Excel文件并提取特定值并保存到数据框。
原因:这有助于质量检查过程,通过循环,我可以将所有报告拉到一个文件夹中并快速保存关键数据点。当前过程包括打开每个文件,并将某些单元格复制并粘贴到“ Master QA” xlsx文件中
它们都具有两个数据点Date
和count
单元格B4
和具有数据点的单元格C4
我们可以使用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)
这将为我们提供以下输出:
但是!这对我们没有任何好处,我们希望能够比较不同的单元格以进行质量检查。因此,我们需要将这些值保存到数据框中。
答案 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)
这将在上述特定情况下为我们提供此输出: