0Pricing
Pandas & NumPy Academy · Lekcja

Odczytywanie plików Excel i JSON

Importować skoroszyty Excela za pomocą pd.read_excel oraz rekordy JSON za pomocą pd.read_json, obsługując typowe różnice formatów

Odczytywanie plików Excel i JSON to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Dlaczego Excel i JSON mają znaczenie

Choć CSV jest uniwersalnym formatem, pliki Excel (.xlsx/.xls) są dominującym formatem danych biznesowych udostępnianych za pośrednictwem poczty e-mail i narzędzi raportowych. JSON jest natywnym formatem interfejsów REST API i baz NoSQL. Pandas udostępnia funkcje pd.read_excel() i pd.read_json(), których interfejsy są podobne do interfejsu czytnika CSV, dzięki czemu zdobyte umiejętności można bezpośrednio wykorzystać.

import pandas as pd

# The three most common load functions share the same philosophy
df_csv   = pd.read_csv('data.csv')
df_excel = pd.read_excel('data.xlsx')
df_json  = pd.read_json('data.json')

Instalowanie silnika Excel

Odczytywanie plików Excel wymaga silnika: openpyxl w przypadku plików .xlsx (nowoczesny format) oraz xlrd w przypadku starszych plików .xls. Należy zainstalować go za pomocą pip install openpyxl. Pandas automatycznie wybiera silnik na podstawie rozszerzenia pliku. Do zapisywania można użyć xlsxwriter, aby korzystać z zaawansowanego formatowania. Jeśli silnik nie jest zainstalowany, read_excel() zgłasza wyjątek ModuleNotFoundError.

# Install the required engine:
# pip install openpyxl          # for .xlsx (modern)
# pip install xlrd==1.2.0       # for .xls (legacy)

import pandas as pd
df = pd.read_excel('report.xlsx', engine='openpyxl')

Wybieranie arkusza za pomocą sheet_name

Skoroszyty Excel mogą zawierać wiele arkuszy. sheet_name= określa, który arkusz należy odczytać: można przekazać ciąg znaków (nazwę arkusza), liczbę całkowitą (pozycję liczoną od zera) albo listę, aby odczytać wiele arkuszy do słownika. Przekazanie sheet_name=None powoduje odczytanie wszystkich arkuszy do słownika, którego kluczami są nazwy arkuszy. Sprawdzenie dostępnych arkuszy za pomocą pd.ExcelFile('file.xlsx').sheet_names to dobry punkt wyjścia.

import pandas as pd

# Read the second sheet
df = pd.read_excel('workbook.xlsx', sheet_name=1)

# Read by name
df = pd.read_excel('workbook.xlsx', sheet_name='Sales')

# Inspect available sheets
xl = pd.ExcelFile('workbook.xlsx')
print(xl.sheet_names)  # ['Summary', 'Sales', 'Costs']

Typowe parametry Excel

pd.read_excel() obsługuje większość tych samych parametrów co read_csv(): header=, index_col=, usecols=, skiprows=, dtype= oraz nrows=. W przypadku Excela parametr usecols akceptuje również ciąg znaków określający zakres kolumn Excela, taki jak 'A:C' lub 'A,C,E'. Jest to wygodne, gdy litery kolumn są znane na podstawie układu arkusza.

import pandas as pd

df = pd.read_excel(
    'sales_report.xlsx',
    sheet_name='Q1',
    header=2,          # header is on row 3 (0-indexed)
    usecols='A:D',     # Excel column range
    skiprows=[3, 4],   # skip rows 4 and 5
    nrows=100
)

Odczytywanie JSON: formaty orient

pd.read_json() odczytuje JSON do obiektu DataFrame. Parametr orient= określa strukturę JSON: 'records' (lista słowników wierszy), 'columns' (słownik tablic kolumn, wartość domyślna), 'index' (słownik słowników wierszy, którego kluczami są indeksy) lub 'values' (surowa tablica). Większość interfejsów REST API zwraca dane w formacie 'records' — zawsze należy najpierw sprawdzić surowy JSON, aby określić właściwą wartość orient.

import pandas as pd

# REST API response: list of records
json_str = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'
df = pd.read_json(json_str, orient='records')
print(df)

Odczytywanie JSON z pliku lub adresu URL

pd.read_json() akceptuje ścieżkę pliku, adres URL lub bezpośrednio ciąg znaków zawierający JSON. W przypadku głęboko zagnieżdżonego JSON-a (np. odpowiedzi API zawierających zagnieżdżone obiekty) należy zamiast tego użyć funkcji json_normalize() z modułu pandas.io.json, która spłaszcza zagnieżdżone słowniki do kolumn o nazwach rozdzielonych kropkami.

import pandas as pd
from pandas.io.json import json_normalize

# From a file
df = pd.read_json('events.json')

# Flatten nested JSON
nested = [{'id': 1, 'user': {'name': 'A', 'age': 30}},
          {'id': 2, 'user': {'name': 'B', 'age': 25}}]
df_flat = json_normalize(nested)
print(df_flat.columns.tolist())  # ['id', 'user.name', 'user.age']

Format JSON Lines

JSON Lines (NDJSON) przechowuje po jednym obiekcie JSON w każdym wierszu, co ułatwia strumieniowe przetwarzanie dużych zbiorów danych. Do analizowania tego formatu należy użyć pd.read_json('file.jsonl', lines=True). Jest on często stosowany w plikach dzienników, eksportach z Kafka oraz formatach zbiorów danych uczenia maszynowego. Każdy wiersz musi być prawidłowym obiektem JSON; niepoprawne wiersze powodują niepowodzenie odczytu.

import pandas as pd

# file.jsonl contains one JSON record per line:
# {"id": 1, "event": "click"}
# {"id": 2, "event": "view"}
df = pd.read_json('events.jsonl', lines=True)
print(df)

Obsługa analizy dat w JSON

JSON nie ma natywnego typu daty — daty są przechowywane jako ciągi znaków lub znaczniki czasu Unix (milisekundy albo sekundy od epoki). Należy ustawić convert_dates=True (wartość domyślna), aby umożliwić Pandas automatyczną konwersję kolumn, których nazwy zawierają 'date', 'time' lub 'at'. W przypadku niestandardowych nazw kolumn lub znaczników czasu należy wykonać konwersję jawnie za pomocą pd.to_datetime(df['col'], unit='ms').

import pandas as pd

# Unix milliseconds timestamp column
df = pd.read_json('events.json', orient='records')
df['created_at'] = pd.to_datetime(df['created_at'], unit='ms')
print(df['created_at'].dtype)  # datetime64[ns]

Porównanie pułapek Excela i JSON-a

Pułapki Excela: scalone komórki powodują powstawanie wierszy NaN, ukryte wiersze i kolumny są uwzględniane w wyniku, a formatowanie liczb (np. daty przechowywane jako liczby zmiennoprzecinkowe) należy skorygować po wczytaniu. Pułapki JSON-a: niespójna obecność pól w poszczególnych rekordach powoduje powstawanie wartości NaN, a klucze całkowite w obiekcie JSON stają się nazwami kolumn w postaci ciągów znaków.

import pandas as pd

# Excel date stored as float (Excel serial date)
df = pd.read_excel('old_report.xls')
# If dates appear as floats (e.g., 44927.0), convert:
# from xlrd import xldate_as_datetime
# df['date'] = df['date'].apply(lambda x: xldate_as_datetime(x, 0))

pd.ExcelFile w przypadku wielu arkuszy

Gdy trzeba wydajnie odczytać wiele arkuszy z tego samego pliku, należy otworzyć menedżera kontekstu pd.ExcelFile i wywołać parse(sheet_name) dla każdego arkusza. Pozwala to uniknąć ponownego otwierania i analizowania pliku dla każdego arkusza — ma to znaczenie w przypadku dużych skoroszytów. Menedżer kontekstu automatycznie zamyka uchwyt pliku.

import pandas as pd

with pd.ExcelFile('annual_report.xlsx') as xf:
    df_q1 = xf.parse('Q1')
    df_q2 = xf.parse('Q2')

print(df_q1.shape, df_q2.shape)

Używanie requests do wczytywania danych z interfejsów JSON API

W przypadku danych z interfejsu REST API należy użyć biblioteki requests do pobrania JSON-a, a następnie przekazać przeanalizowany obiekt Pythona do pd.DataFrame() lub pd.json_normalize(). Ten wzorzec oddziela obsługę HTTP od analizowania danych i zapewnia dostęp do nagłówków, uwierzytelniania oraz stronicowania, zanim Pandas rozpocznie przetwarzanie danych.

import pandas as pd
import requests

response = requests.get('https://api.example.com/records')
data = response.json()   # Python list of dicts
df = pd.DataFrame(data)
print(df.head())

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat odczytywania plików Excel i JSON za pomocą Pandas z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczył(a) się Pan/Pani, że: pd.read_excel() odczytuje pliki xlsx i umożliwia określenie arkusza do wczytania za pomocą sheet_name, pd.read_json() obsługuje wiele struktur JSON określanych parametrem orient, a json_normalize() spłaszcza zagnieżdżone obiekty JSON do płaskiego obiektu DataFrame. Następnie zajmiemy się eksportowaniem obiektów DataFrame do plików CSV i Excel w celu ich udostępniania oraz dalszego przetwarzania.

Często zadawane pytania

Czy lekcja „Odczytywanie plików Excel i JSON” jest bezpłatna?

Tak — pełny tekst „Odczytywanie plików Excel i JSON” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Odczytywanie plików Excel i JSON”?

Importować skoroszyty Excela za pomocą pd.read_excel oraz rekordy JSON za pomocą pd.read_json, obsługując typowe różnice formatów Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Odczytywanie plików Excel i JSON”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Odczytywanie plików CSV
  2. Odczytywanie plików Excel i JSON
  3. Zapisywanie DataFrame do plików
  4. Odczytywanie z adresów URL i StringIO
← Powrót do Pandas & NumPy Academy