Automatyzacja wczytywania i łączenia danych z wielu arkuszy Excela
Czas zautomatyzować import danych z wszystkich trzech giełd zapisanych w pliku Excel listings.xlsx – wykorzystasz do tego pętlę for. Oto plan działania:
- Pobierz nazwy arkuszy obiektu
pd.ExcelFile()za pomocą atrybutusheet_names. - Utwórz pustą listę.
- Napisz pętlę for, która przejdzie przez te nazwy arkuszy i wczyta dane z odpowiedniego arkusza do zmiennej. W razie potrzeby dodaj kolumnę referencyjną. W każdej iteracji dołącz zawartość tej zmiennej do listy.
- Połącz wszystkie DataFrame'y z listy w jeden.
W razie wątpliwości zajrzyj do poprzednich ćwiczeń z tego rozdziału lub do dokumentacji pandas. Biblioteka pandas jest już zaimportowana jako pd.
To ćwiczenie jest częścią kursu
Importowanie i zarządzanie danymi finansowymi w Pythonie
Instrukcje do ćwiczenia
- Utwórz obiekt
pd.ExcelFile()na podstawie plikulistings.xlsxi przypisz go do zmiennejxls. - Pobierz nazwy arkuszy z atrybutu
.sheet_namesobiektuxlsi przypisz je do zmiennejexchanges. - Utwórz pustą listę i przypisz ją do zmiennej
listings. - Iteruj po
exchangesza pomocą pętli for, używającexchangejako zmiennej iteratora. W każdej iteracji:- Użyj
pd.read_excel(), podającxlsjako źródło danych,exchangejako argumentsheet_nameoraz'n/a'jakona_values, aby obsłużyć brakujące wartości. Wynik przypisz do zmiennejlisting. - Dodaj do
listingnową kolumnę o nazwie'Exchange'z wartościąexchange(zmienna iteratora). - Dołącz DataFrame
listingdo listylistings.
- Użyj
- Użyj
pd.concat(), aby połączyć zawartość listylistings, i przypisz wynik do zmiennejlisting_data. - Sprawdź zawartość
listing_dataza pomocą.info().
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Create the pd.ExcelFile() object
xls = ____
# Extract the sheet names from xls
exchanges = ____.____
# Create an empty list: listings
# Import the data
for exchange in exchanges:
listing = pd.____(____, sheet_name=____, na_values='n/a')
listing['Exchange'] = ____
listings.____(____)
# Concatenate the listings: listing_data
listing_data = pd.____(____)
# Inspect the results
listing_data.info()