Mam duży plik arkusza kalkulacyjnego (.xlsx), który przetwarzam za pomocą pand w języku Python. Zdarza się, że potrzebuję danych z dwóch zakładek w tym dużym pliku. Jedna z zakładek zawiera mnóstwo danych, a druga to tylko kilka kwadratowych komórek.
Kiedy używam pd.read_excel () na dowolnym arkuszu, wygląda na to, że załadowany jest cały plik (nie tylko arkusz, który mnie interesuje). Więc kiedy używam tej metody dwa razy (raz dla każdego arkusza), efektywnie muszę cierpieć na dwukrotne przeczytanie całego skoroszytu (nawet jeśli używamy tylko określonego arkusza).
Czy używam go źle, czy jest to po prostu ograniczone w ten sposób?
Dziękuję Ci!
Odpowiedzi:
Spróbuj
pd.ExcelFile
:Jak zauważył @HaPsantran, cały plik Excel jest wczytywany podczas
ExcelFile()
połączenia (wydaje się, że nie ma sposobu na obejście tego). Dzięki temu nie musisz czytać tego samego pliku za każdym razem, gdy chcesz uzyskać dostęp do nowego arkusza.Zauważ, że
sheet_name
argumentem dopd.read_excel()
może być nazwa arkusza (jak wyżej), liczba całkowita określająca numer arkusza (np. 0, 1 itd.), Lista nazw arkuszy lub indeksów lubNone
. Jeśli podano listę, zwraca słownik, w którym kluczami są nazwy / indeksy arkuszy, a wartościami są ramki danych. Domyślnie po prostu zwraca pierwszy arkusz (tj.sheet_name=0
.).Jeśli
None
podano, wszystkie arkusze są zwracane jako{sheet_name:dataframe}
słownik.źródło
sheet_name
a niesheetname
. Nie zdawałem sobie sprawy, że to przestarzała część, ponieważ nadal działała na metodzie read_excel, ale nie na metodzie parsowania.Istnieją 3 opcje:
Czytaj wszystkie arkusze bezpośrednio w uporządkowanym słowniku.
Dzięki @ihightower za wskazanie tego i @toto_tico za wskazanie problemu z wersją.
Przeczytaj pierwszy arkusz bezpośrednio do ramki danych
Przeczytaj plik Excela i uzyskaj listę arkuszy. Następnie wybierz i załaduj arkusze.
Przeczytaj wszystkie arkusze i zapisz je w słowniku. Taki sam jak pierwszy, ale bardziej wyraźny.
Aktualizacja: Dzięki @toto_tico za wskazanie problemu z wersją.
źródło
df_sheet_map = pd.read_excel(file_fullpath, sheetname=None)
, że arkusze w słowniku będą automatycznie .. i uzyskam dostęp do arkusza jako ramki danych w następujący sposób:df_sheet_map['house']
Możesz również użyć indeksu dla arkusza:
poda pierwszy arkusz roboczy. dla drugiego arkusza:
źródło
Możesz również określić nazwę arkusza jako parametr:
prześle tylko arkusz
"sheet_name"
.źródło
domyślnie przeczytaj pierwszy arkusz skoroszytu.
przeczytaj konkretny arkusz skoroszytu i
czytaj wszystkie arkusze robocze z programu Excel do pandas dataframe, ponieważ typ OrderedDict oznacza zagnieżdżone ramki danych, wszystkie arkusze jako ramki danych zebrane wewnątrz dataframe i jego typ to OrderedDict.
źródło
Tak, niestety zawsze załaduje pełny plik. Jeśli robisz to wielokrotnie, prawdopodobnie najlepiej wyodrębnić arkusze do oddzielnych plików CSV, a następnie załadować je osobno. Możesz zautomatyzować ten proces za pomocą d6tstack, który dodaje również dodatkowe funkcje, takie jak sprawdzanie, czy wszystkie kolumny są równe we wszystkich arkuszach lub wielu plikach Excel.
Zobacz przykłady programu d6tstack Excel
źródło
Jeśli zapisałeś plik Excela w tym samym folderze, co program w Pythonie (adresowanie względne), wystarczy podać numer arkusza wraz z nazwą pliku. Składnia = pd.read_excel (nazwa pliku, nr arkusza) Przykład:
źródło