Python: цикл по листам Excel, назначение информации заголовка столбцам на каждом листе, затем объединение в один файл - PullRequest
0 голосов
/ 09 октября 2019

Я новичок в Python и пытаюсь автоматизировать некоторые задачи. У меня есть файл Excel с 8 листами, где на каждом листе есть некоторый идентификатор сверху и ниже, которые представляют собой табличные данные с заголовками. Каждый лист имеет идентификаторы интереса и таблицы в том же месте. Я хочу извлечь некоторые данные из верхней части каждого листа и вставить их в виде столбцов, удалить ненужные строки (после того, как я назначил некоторые из них столбцам) и столбцы, а затем объединить в один CSV-файл в качестве выходных данных.

Код, который я написал, выполняет свою работу. Мой код читает на каждом листе, выполняет операции на листе, затем я запускаю тот же процесс для следующего листа (8 раз), прежде чем использовать .concat для их объединения.

import pandas as pd
import numpy as np
inputfile = "input.xlsx" 
outputfile = "merged.csv"

##LN X: READ FIRST SHEET AND ASSIGN HEADER INFORMATION TO COLUMNS

df1 = pd.read_excel(inputfile, sheet_name=0, usecols="A:N", index=0)

#Define cell locations of fields in the header area to be assigned to 
columns
#THIS CELL LOCATIONS ARE SAME ON ALL SHEETS
A = df1.iloc[3,4]
B = df1.iloc[2,9]
C = df1.iloc[3,9]
D = df1.iloc[5,9]
E = df1.iloc[4,9]

#Insert well header info as columns in data for worksheet1
df1.insert(0,"column_name", A)

df1.insert(1,"column_name", B)

df1.insert(4,"column_name", E)

# Rename the columns in `enter code here`worksheet1 DataFrame to reflect 
actual column headers
df1.rename(columns={'Unnamed: 0': 'Header1', 
               'Unnamed: 1': 'Header2', }, inplace=True)         

df_merged = pd.concat([df1, df2, df3, df4, df5, df6, df7, 
  df8],ignore_index=True, sort=False)

#LN Y: Remove non-numerical entries

df_merged = df_merged.replace(np.nan, 0)

##Write results to CSV file

df_merged.to_csv(outputfile, index=False)

Поскольку этот код будет использоваться в других файлах Excel с различным количеством листов, я ищу любые указания о том, как включить повторяющиеся операции в каждом листе в цикле. В основном, повторяя шаги от LN X до LN Y для каждого листа (8 раз !!). Я борюсь с тем, как использовать функцию цикла. Заранее спасибо за вашу помощь.

1 Ответ

1 голос
/ 09 октября 2019

df1 = pd.read_excel (inputfile, sheet_name = 0, usecols = "A: N", index = 0)

Вы должны изменить аргумент sheet_name на

sheet_name = None

Тогда df1 будет словарем DataFrames. Затем вы можете зациклить df1, используя

для df в df1:

df1 [df] .insert (0, "column_name", A) ....

Теперь выполните ваши действия и объедините DFS. Вы можете зациклить их снова и объединить их в один финальный df.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...