432 Stimmen

Verwendung von Pandas zum pd.read_excel() für mehrere Arbeitsblätter desselben Arbeitsbuchs

Ich habe eine große Tabellendatei (.xlsx), die ich mit Python Pandas verarbeite. Es kommt vor, dass ich Daten aus zwei Registerkarten (Blättern) in dieser großen Datei benötige. Eine der Registerkarten enthält eine Menge Daten und die andere nur ein paar einzelne Zellen.

Wenn ich pd.read_excel() für irgendein Arbeitsblatt verwende, scheint es mir, als ob die gesamte Datei geladen wird (nicht nur das Arbeitsblatt, das mich interessiert). Wenn ich die Methode zweimal verwende (einmal für jedes Blatt), muss ich praktisch zweimal das gesamte Arbeitsbuch einlesen (obwohl wir nur das angegebene Blatt verwenden).

Wie lade ich nur bestimmte Blätter mit pd.read_excel()?

15voto

Ashu007 Punkte 737
pd.read_excel('filename.xlsx') 

standardmäßig das erste Blatt des Arbeitsbuchs einlesen.

pd.read_excel('filename.xlsx', sheet_name = 'sheetname') 

ein bestimmtes Blatt des Arbeitsbuchs einlesen und

pd.read_excel('filename.xlsx', sheet_name = None) 

alle Tabellenblätter von Excel in ein Pandas-Datenframe einlesen als Typ OrderedDict, was bedeutet, dass verschachtelte Datenframes vorhanden sind. Alle Tabellenblätter werden als Datenframes innerhalb des Datenframes gesammelt und es ist vom Typ OrderedDict.

15voto

anujsyal Punkte 168

Wenn Sie daran interessiert sind, alle Tabellenblätter zu lesen und zusammenzuführen. Der beste und schnellste Weg, dies zu tun

sheet_to_df_map = pd.read_excel('path_to_file.xls', sheet_name=None)
mdf = pd.concat(sheet_to_df_map, axis=0, ignore_index=True)

Dies wird alle Blätter in einen einzigen Datenrahmen m_df umwandeln

6voto

CreekGeek Punkte 1649

Wenn:

  • Sie mehrere, aber nicht alle Arbeitsblätter möchten, und
  • Sie eine einzelne df als Ausgabe möchten

Dann können Sie eine Liste von Arbeitsblattnamen übergeben. Die Sie manuell bevölkern könnten:

import pandas as pd

path = "C:\\Pfad\\Zu\\Ihren\\Daten\\"
file = "daten.xlsx"
sheet_lst_wanted = ["01_IrgendeinName","05_IrgendeinName","12_IrgendeinName"] # Tabellennamen aus Excel

### Daten importieren und zusammenstellen ###

# alle Blätter aus der Liste in ein geordnetes Dictionary einlesen    
dict_temp = pd.read_excel(path+file, sheet_name= sheet_lst_wanted)

# die geordneten Dictionary-Elemente zu einem DataFrame zusammenfügen
df = pd.concat(dict_temp, axis=0, ignore_index=True)

ODER

Eine automatisierung ist möglich, wenn Ihre gewünschten Arbeitsblätter eine gemeinsame Namenskonvention haben, die es Ihnen auch ermöglicht, unerwünschte Blätter zu unterscheiden:

# Ersetzen Sie den folgenden Block durch die Zeile sheet_lst_wanted im obigen Block

import xlrd

# Zeichenfolge, die nur in den gewünschten Arbeitsblättern vorkommt
str_like = "IrgendeinName" 

### Liste der Blattnamen in Excel-Datei erstellen ###
xls = xlrd.open_workbook(path+file, on_demand=True)
sheet_lst = xls.sheet_names()

### Liste von Blättern erstellen, die den Kriterien entsprechen ###
sheet_lst_wanted = []

for s in sheet_lst:
    # Hinweis: Die folgende bedingte Anweisung basiert darauf, dass meine Blätter mit der in sheet_like definierten Zeichenfolge enden
    if s[-len(str_like):] == str_like:
        sheet_lst_wanted.append(s)
    else:
        pass

5voto

Pratyush Tripathy Punkte 111

Sie können alle Blätter mit den folgenden Zeilen lesen

import pandas as pd
file_instance = pd.ExcelFile('your_file.xlsx')

main_df = pd.concat([pd.read_excel('your_file.xlsx', sheet_name=name) for name in file_instance.sheet_names] , axis=0)

4voto

Tajinder Punkte 2218
df = pd.read_excel('FileName.xlsx', 'SheetName')

Dies wird das Blatt SheetName aus der Datei FileName.xlsx lesen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X