Итерация по нескольким файлам Excel, сохранение определенных ячеек в Dataframe с использованием Python - PullRequest
0 голосов
/ 24 января 2019

Проблема: Я хочу перебрать файлы Excel, вытащить определенные значения и сохранить их в массив данных.

Почему: Это помогает процессу QA, с помощью цикла я могу извлекать все отчеты в папке и быстро сохранять ключевые точки данных. Текущий процесс включает в себя открытие каждого файла, копирование и вставку определенных ячеек в файл «Master QA» xlsx

Пример: У нас есть три файла в папке enter image description here

И все они имеют две точки данных Date и count ячейка 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 голосов
/ 25 января 2019

Решение, которое Чарли Кларк упоминает выше, не совсем то, что мне нужно.Мне нужно захватить определенные ячейки, потому что используемый мной документ 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

0 голосов
/ 24 января 2019

Чтобы сохранить в фрейме данных , мы должны сделать следующее:

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, мы увидим, что у нас есть фрейм данных, с которым легче работать.

...