Pandas & NumPy Academy · Lektion

Læsning af CSV-filer

Indlæs CSV-filer med pd.read_csv, angiv skilletegn, header-rækker og indekskolonner, og forhåndsvis resultatet.

Lektion 1 af 413 trin

Læsning af CSV-filer er en gratis Pandas & NumPy Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Pandas & NumPy Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.

Hvorfor CSV er det universelle format

CSV (Comma-Separated Values) er det mest udbredte format til udveksling af tabeldata. Det er let at læse for mennesker, understøttes af alle databaser, regneark og analyseværktøjer og kræver ingen skemadefinition. pd.read_csv() er den Pandas-funktion, der kaldes oftest i dataanalyse, fordi stort set alle offentlige datasæt, API-eksporter og databaseudtræk findes i CSV-format.

import pandas as pd

# Read a CSV file from disk
df = pd.read_csv('data/sales.csv')
print(df.shape)
print(df.head())

Grundlæggende kald af read_csv()

Det eneste påkrævede argument er filstien (en streng eller et Path-objekt). Som standard antager Pandas, at den første række er overskriften (kolonnenavne), at skilletegnet er et komma, og at værdierne kan tildeles passende dtypes. Den resulterende DataFrame har et standardheltalsbaseret RangeIndex. Kald altid df.info() umiddelbart efter indlæsning for at opdage problemer med typebestemmelsen.

import pandas as pd

df = pd.read_csv('products.csv')

# Equivalent with explicit defaults:
df = pd.read_csv('products.csv',
                 sep=',',
                 header=0,
                 index_col=None)

Styring af skilletegnet

Brug parameteren sep= til at angive et skilletegn, der ikke er et komma. Tabulatorseparerede filer (TSV) bruger sep='\t'. Nogle europæiske eksporter bruger semikolon som skilletegn (sep=';'), fordi komma bruges som decimaltegn. Send sep=None, engine='python' med for at lade Pandas registrere skilletegnet automatisk ud fra filens indhold.

import pandas as pd

# Tab-separated file
df_tsv = pd.read_csv('data.tsv', sep='\t')

# Semicolon-separated (common in Europe)
df_semi = pd.read_csv('data.csv', sep=';')

# Auto-detect separator
df_auto = pd.read_csv('data.txt', sep=None, engine='python')

Overskrift og skiprows

Hvis en CSV-fil ikke har en overskriftsrække, skal du angive header=None, hvorefter Pandas tildeler heltalsbaserede kolonnenavne (0, 1, 2, ...). Angiv brugerdefinerede navne med names=['a', 'b', 'c']. Brug skiprows=n til at springe de første n rækker over (for metadata eller kommentarer øverst i filen). skiprows accepterer også en liste med bestemte rækkenumre, der skal springes over.

import pandas as pd

# CSV with no header
df = pd.read_csv('noheader.csv', header=None,
                 names=['id', 'value', 'category'])

# Skip first 3 rows (e.g., metadata or comments)
df = pd.read_csv('report.csv', skiprows=3)

Angivelse af indekskolonnen

index_col= angiver, hvilken kolonne der skal bruges som rækkeindeks. Send et kolonnenavn eller en heltalsposition med. Et meningsfuldt indeks (f.eks. en datokolonne eller et entydigt ID) muliggør hurtig etiketbaseret adgang med .loc og er påkrævet før tidsserieoperationer. Send en liste med for at oprette et MultiIndex.

import pandas as pd

# Use 'date' column as row index
df = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
print(df.index.dtype)  # datetime64[ns]

# Equivalent with column position
df2 = pd.read_csv('timeseries.csv', index_col=0, parse_dates=True)

Fortolkning af datoer ved indlæsning

parse_dates=True fortæller Pandas, at den skal forsøge at konvertere indekset til datetime. Send en liste med kolonnenavne til parse_dates=['col1', 'col2'] for at fortolke bestemte kolonner, der ikke er indekset, som datoer. Pandas forsøger automatisk med almindelige formater; brug date_format= til usædvanlige formater. Fortolkning af datoer ved indlæsning undgår gentagne kald af pd.to_datetime() senere.

import pandas as pd

# Parse 'order_date' column as datetime
df = pd.read_csv('orders.csv',
                 parse_dates=['order_date'])
print(df['order_date'].dtype)  # datetime64[ns]

Valg af kolonner med usecols

usecols=['col1', 'col2'] indlæser kun de angivne kolonner og ignorerer alle andre. Det er afgørende for store CSV-filer – der er ingen grund til at læse en fil med 200 kolonner, hvis du kun har brug for 5. Det reducerer både I/O-tiden og hukommelsesforbruget betydeligt. Send en callable for at vælge kolonner ud fra et navnemønster.

import pandas as pd

# Load only 3 of potentially many columns
df = pd.read_csv('big_file.csv',
                 usecols=['user_id', 'event', 'timestamp'])
print(df.columns.tolist())  # ['user_id', 'event', 'timestamp']

Styring af datatyper ved indlæsning

Pandas udleder datatyper, men udledningen kan være forkert – en ID-kolonne med udelukkende numeriske strenge bliver til int64, eller en priskolonne med manglende værdier bliver uventet til float64. Brug dtype={'col': str} for at gennemtvinge typer. Det er også mere effektivt: Når datatyperne angives på forhånd, springes udledningen over, og indlæsningen af store filer kan blive 20-30 % hurtigere.

import pandas as pd

df = pd.read_csv('orders.csv', dtype={
    'order_id': str,      # keep as string (not int)
    'price': float,
    'quantity': 'int32'   # use smaller int
})

Håndtering af manglende værdier ved indlæsning

Som standard genkender Pandas mange repræsentationer af manglende værdier: tomme celler, 'NA', 'NaN', 'N/A', 'null' osv. Brug na_values=['?', '-', 'missing'] for at tilføje brugerdefinerede tokens. Brug keep_default_na=False for at deaktivere den indbyggede liste og kun behandle de værdier, du angiver, som manglende. Det forhindrer, at legitime strengværdier som 'NA' (en forkortelse) ved en fejl behandles som NaN.

import pandas as pd

df = pd.read_csv('survey.csv',
                 na_values=['?', '', 'N/A', 'none'])
print(df.isnull().sum())

nrows og chunksize til store filer

nrows=100 indlæser kun de første 100 rækker – perfekt til et hurtigt skematjek af en enorm fil. chunksize=10000 returnerer en TextFileReader-iterator, der leverer DataFrames med 10000 rækker ad gangen, så du kan behandle filer i bidder, selv når de ikke kan være i RAM. Indlæsning i bidder gennemgås grundigt i den avancerede lektion om ydeevne.

import pandas as pd

# Quick peek at a large file
header_df = pd.read_csv('huge.csv', nrows=5)
print(header_df.dtypes)

# Chunked reading
for chunk in pd.read_csv('huge.csv', chunksize=50000):
    print(chunk.shape)  # process each chunk

Almindelige faldgruber med read_csv

Vær opmærksom på disse hyppige problemer: kodningsfejl (brug encoding='utf-8' eller 'latin-1'), indledende mellemrum i kolonnenavne (brug skipinitialspace=True), tusindtalsseparatorer i tal (brug thousands=',') og decimal-kommaer i europæiske tal (brug decimal=',' og sep=';'). Hvis de ignoreres, omdanner de hver især lydløst numeriske kolonner til objekter.

import pandas as pd

# European format: semicolon sep, comma decimal, UTF-8
df = pd.read_csv('euro_data.csv',
                 sep=';',
                 decimal=',',
                 thousands='.',
                 encoding='utf-8',
                 skipinitialspace=True)

Hurtigt tjek

Test din forståelse af læsning af CSV-filer med Pandas fra denne lektion.

Opsummering af lektionen

I denne lektion lærte du, at pd.read_csv() er den primære funktion til indlæsning af tabeldata og har mange konfigurationsparametre, at sep, header, index_col og parse_dates styrer, hvordan filen fortolkes, og at usecols og dtype forbedrer ydeevnen og typesikkerheden for store filer. Derefter læser vi Excel- og JSON-filer, som har deres egne formatspecifikke parametre.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Læsning af CSV-filer” gratis?

Ja — hele teksten til “Læsning af CSV-filer” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Pandas & NumPy Academy-kurset, skal du opgradere til CoddyKit PRO. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Læsning af CSV-filer”?

Indlæs CSV-filer med pd.read_csv, angiv skilletegn, header-rækker og indekskolonner, og forhåndsvis resultatet. Du øver dig i Pandas & NumPy Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Pandas & NumPy Academy?

Der kræves ingen tidligere erfaring. Pandas & NumPy Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Læsning af CSV-filer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Pandas & NumPy Academy-lektion?

Ja. Alle Pandas & NumPy Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Læsning af CSV-filer
  2. Læsning af Excel- og JSON-filer
  3. Skrivning af DataFrames til filer
  4. Læsning fra URL'er og StringIO
← Tilbage til Pandas & NumPy Academy