J'ai un fichier Excel avec plusieurs feuilles qui doivent être consolidées. Cependant, les en-têtes de colonne varient les uns des autres. Actuellement, les données ressemblent à ceci.
Sheet 1
+-------------+--------------+----------+--------+---------+---------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header | Header1 | Header2 |
+-------------+--------------+----------+--------+---------+---------+
| 17 | Data | Data | 0 | 0 | 0 |
| 17 | Data | Data | 0 | 0 | 0 |
+-------------+--------------+----------+--------+---------+---------+
Sheet 2
+-------------+--------------+----------+---------+---------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header3 | Header2 |
+-------------+--------------+----------+---------+---------+
| 15 | Data | Data | 0 | 0 |
| 15 | Data | Data | 0 | 0 |
+-------------+--------------+----------+---------+---------+
Sheet 3
+-------------+--------------+----------+---------+---------+---------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header4 | Header1 | Header3 |
+-------------+--------------+----------+---------+---------+---------+
| 16 | Data | Data | 0 | 0 | 0 |
| 16 | Data | Data | 0 | 0 | 0 |
+-------------+--------------+----------+---------+---------+---------+
OUTPUT
+-------------+--------------+----------+--------+---------+---------+---------+---------+-----------+
| FISCAL_YEAR | COMPANY_CODE | ACCOUNTS | Header | Header1 | Header2 | Header3 | Header4 | SheetName |
+-------------+--------------+----------+--------+---------+---------+---------+---------+-----------+
| 17 | Data | Data | 0 | 0 | 0 | null | null | Sheet1 |
| 17 | Data | Data | 0 | 0 | 0 | null | null | Sheet1 |
| 15 | Data | Data | null | null | 0 | 0 | null | Sheet2 |
| 15 | Data | Data | null | null | 0 | 0 | null | Sheet2 |
| 16 | Data | Data | null | 0 | null | 0 | 0 | Sheet3 |
| 16 | Data | Data | null | 0 | null | 0 | 0 | Sheet3 |
+-------------+--------------+----------+--------+---------+---------+---------+---------+-----------+
Je suis relativement nouveau sur Python. J'ai utilisé Pandas et numpy. J'ai jusqu'à 60 feuilles à travailler. Quelqu'un peut-il m'aider à comprendre comment y parvenir? Si ce n'est pas python, existe-t-il de toute façon un autre outil / méthode que je devrais utiliser? Je pourrais vraiment utiliser un exemple de code pour commencer.
Ton aide est grandement appréciée. Merci d'avance
3 réponses
import pandas as pd
filepath = r"filePath here"
sheets_dict = pd.read_excel(filepath, sheet_name=None)
full_table = pd.DataFrame()
#loop through sheets
for name, sheet in sheets_dict.items():
sheet['sheet'] = name
#sheet = sheet.rename(columns=lambda x: x.split('\n')[-1])
full_table = full_table.append (sheet)
full_table.reset_index (inplace=True, drop=True)
#Write to Excel
writer = pd.ExcelWriter('consolidated_TB1.xlsx', engine='xlsxwriter')
full_table.to_excel(writer,'Sheet1')
En utilisant R, c'est assez facile à faire.
library(openxlsx) # to read xlsx files
library(purrr) # for the "map" function
wb <- loadWorkbook("path/filename.xlsx")
all_sheets <- names(wb)
merged_data <- map_df(all_sheets, ~ read.xlsx(wb, sheet = .x)
Utilisation de la boucle for et rbind
dans R:
for (i in file.list) {
data <- rbind(data, read.xlsx(i, sheetIndex = 1))
}
rbind
utilisation: Pour joindre verticalement deux blocs de données (ensembles de données), utilisez la fonction rbind. Les deux trames de données doivent avoir les mêmes variables, mais elles ne doivent pas nécessairement être dans le même ordre.
total <- rbind(data frameA, data frameB)
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.