Pandas & NumPy Academy · Lektion

Läsa Excel- och JSON-filer

Importera Excel-arbetsböcker med pd.read_excel och JSON-poster med pd.read_json och hantera vanliga formatvariationer.

Lektion 2 av 413 steg

Läsa Excel- och JSON-filer är en gratis lektion i Pandas & NumPy Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Pandas & NumPy Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Varför Excel och JSON är viktiga

CSV är visserligen det universella formatet, men Excel-filer (.xlsx/.xls) är det vanligaste formatet för affärsdata som delas via e-post och rapportverktyg. JSON är det ursprungliga formatet för REST-API:er och NoSQL-databaser. Pandas tillhandahåller pd.read_excel() och pd.read_json(), som följer samma API-principer som CSV-läsaren, så kunskaperna kan överföras direkt.

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')

Installera Excel-motorn

För att läsa Excel-filer krävs en motor: openpyxl för .xlsx-filer (modernt format) och xlrd för äldre .xls-filer. Installera med pip install openpyxl. Pandas väljer automatiskt motor utifrån filändelsen. För skrivning använder Ni xlsxwriter när avancerad formatering behövs. Om motorn inte är installerad utlöser read_excel() ett 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')

Välja ett kalkylblad med sheet_name

Excel-arbetsböcker kan innehålla flera kalkylblad. sheet_name= anger vilket som ska läsas: skicka med en sträng (kalkylbladets namn), ett heltal (position med nollbaserat index) eller en lista för att läsa flera kalkylblad till en dict. Skicka med sheet_name=None för att läsa in alla kalkylblad till en dict med kalkylbladsnamnen som nycklar. Ett bra första steg är att undersöka tillgängliga kalkylblad med pd.ExcelFile('file.xlsx').sheet_names.

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']

Vanliga Excel-parametrar

pd.read_excel() stöder de flesta av samma parametrar som read_csv(): header=, index_col=, usecols=, skiprows=, dtype= och nrows=. För Excel accepterar usecols även en sträng med ett intervall av Excel-kolumner, till exempel 'A:C' eller 'A,C,E'. Det är praktiskt när kolumnbokstäverna är kända från kalkylbladets layout.

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
)

Läsa JSON: orienteringsformat

pd.read_json() läser in JSON till en DataFrame. Parametern orient= anger JSON-strukturen: 'records' (en lista med dictar för rader), 'columns' (en dict med arrayer för kolumner, standardvärdet), 'index' (en dict med rad-dictar som indexnycklar) eller 'values' (en rå array). De flesta REST-API:er returnerar formatet 'records' – inspektera alltid den råa JSON-datan först för att avgöra rätt orientering.

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)

Läsa JSON från en fil eller URL

pd.read_json() accepterar en filsökväg, en URL eller en JSON-sträng direkt. För djupt nästlad JSON (till exempel API-svar med nästlade objekt) använder Ni i stället json_normalize() från modulen pandas.io.json. Den plattar ut nästlade dictar till kolumner med punktseparerade namn.

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']

JSON Lines-format

JSON Lines (NDJSON) lagrar ett JSON-objekt per rad, vilket gör det enkelt att strömma stora datamängder. Använd pd.read_json('file.jsonl', lines=True) för att tolka formatet. Det är vanligt i loggfiler, Kafka-exporter och format för maskininlärningsdataset. Varje rad måste vara ett giltigt JSON-objekt; felaktiga rader gör att läsningen misslyckas.

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)

Hantera datumtolkning i JSON

JSON har ingen inbyggd datatyp för datum – datum lagras som strängar eller Unix-tidsstämplar (millisekunder eller sekunder sedan epoken). Ange convert_dates=True (standardvärdet) för att låta Pandas försöka konvertera kolumner automatiskt när deras namn innehåller 'date', 'time' eller 'at'. För anpassade kolumnnamn eller tidsstämplar konverterar Ni uttryckligen med 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]

Jämförelse av fallgropar i Excel och JSON

Fallgropar i Excel: sammanslagna celler skapar NaN-rader, dolda rader/kolumner inkluderas i resultatet och talformatering (till exempel datum som lagras som flyttal) måste korrigeras efter inläsningen. Fallgropar i JSON: inkonsekvent förekomst av fält mellan poster skapar NaN, och heltalsnycklar i ett JSON-objekt blir strängar som kolumnnamn.

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 för flera kalkylblad

När Ni behöver läsa flera kalkylblad från samma fil effektivt öppnar Ni en kontexthanterare för pd.ExcelFile och anropar parse(sheet_name) för varje kalkylblad. Det förhindrar att filen öppnas och tolkas på nytt för varje kalkylblad – något som är viktigt för stora arbetsböcker. Kontexthanteraren stänger automatiskt filhandtaget.

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)

Använda requests för att läsa in JSON-API:er

För data från REST-API:er använder Ni biblioteket requests för att hämta JSON och skickar det tolkade Python-objektet till pd.DataFrame() eller pd.json_normalize(). Detta mönster skiljer HTTP-hanteringen från datatolkningen och ger Er tillgång till headers, autentisering och paginering innan Pandas bearbetar datan.

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())

Snabb kontroll

Testa Era kunskaper om hur man läser Excel- och JSON-filer med Pandas utifrån den här lektionen.

Sammanfattning av lektionen

I den här lektionen har Ni lärt Er att pd.read_excel() läser xlsx-filer och låter Er ange vilket kalkylblad som ska läsas in med sheet_name, att pd.read_json() hanterar flera JSON-strukturer som styrs av parametern orient och att json_normalize() plattar ut nästlade JSON-objekt till en platt DataFrame. Härnäst exporterar vi DataFrames till CSV- och Excel-filer för delning och vidare bearbetning.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”Läsa Excel- och JSON-filer” gratis?

Ja – hela texten till ”Läsa Excel- och JSON-filer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Pandas & NumPy Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Pandas & NumPy Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Läsa Excel- och JSON-filer”?

Importera Excel-arbetsböcker med pd.read_excel och JSON-poster med pd.read_json och hantera vanliga formatvariationer. Ni övar på Pandas & NumPy Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Pandas & NumPy Academy?

Du behöver inga förkunskaper. Utbildningen i Pandas & NumPy Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Läsa Excel- och JSON-filer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Pandas & NumPy Academy-lektionen?

Ja. Varje Pandas & NumPy Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Läsa CSV-filer
  2. Läsa Excel- och JSON-filer
  3. Skriva DataFrames till filer
  4. Läsa från URL:er och StringIO
← Tillbaka till Pandas & NumPy Academy