problemet
hvis du arbejder med CSV, har du på et tidspunkt sandsynligvis forsøgt at åbne store CSV-eller tekstfiler, men måske ikke åbnet dem. Min kollega modtog engang en stor csv-fil på 8 GB. Han ville kigge på indholdet, men han kunne ikke åbne det ved hjælp af noget program, han prøvede, Notesblok, udmærke sig osv. Filen var simpelthen for stor til, at programmet endda kunne begynde.
så han rakte ud til mig for at få hjælp. Hans anmodning var relativt enkel: åbn den 8GB store csv-fil og potentielt se på data i de første par tusinde linjer. Denne tilsyneladende umulige opgave er let, når du vælger det rigtige værktøj – Python.
vores tilgang
vi vil først undersøge måder at undersøge indholdet af den store csv. Så nedbryder vi den store fil i små filer, så dataene bliver brugbare (åbne?) i udmærke sig.
til demonstrationsformål bruger vi ikke en 8 GB stor csv-fil; i stedet bruger vi en mindre fil med kun 2.600 rækker data. Hvis du vil følge med, er du velkommen til at hente eksemplet herfra.
løsningen
som altid starter vi med at importere de nødvendige biblioteker, i denne øvelse har vi bare brug for pandas
.
import pandas as pd
df = pd.read_csv('large_data.csv')
df_small = pd.read_csv('large_data.csv', nrows = 1000)
pd.read_csv()
tillader os at læse nogen .CSV-fil i Python, uanset filstørrelsen-mere på dette punkt senere. En CSV-fil er en kommasepareret værdifil, som dybest set er en tekstfil. Denne pandas-metode har et valgfrit argument nrows
, som angiver antallet af rækker, du vil indlæse.
den første variabel df
indlæste alt inde i csv-filen. Mens den anden variabel df_small
kun indlæste de første 1.000 rækker af data. Vi kan kontrollere det ved at kalde .shape
attributten.

som vist ovenfor, “large_data.CSV ” fil indeholder 2618 rækker og 11 kolonner af data i alt. Og vi kan også bekræfte, at i variablen df_small
indlæste vi kun de første 1.000 rækker med data, også 11 kolonner.
Typing df_small.head()
viser de første 5 rækker af data inden for df_small
dataframe. Vi kan tage et kig ind i den store fil på denne måde!
hvad nu, hvis vi vil være i stand til at åbne datafilen ved kun at bruge
selvom vi ikke kan bruge magi til at åbne denne 8GB-fil, kan vi “opdele og erobre” ved at nedbryde den i mindre filer. For eksempel 8 filer med 1 GB hver eller 16 filer med 500 MB hver. En moderne version af
denne gang indlæser vi dataframen lidt anderledes – med et valgfrit argument chunksize
. Igen bruger vi til demonstrationsformål en meget mindre fil.
df = pd.read_csv('large_data.csv', chunksize = 900)
uden at komme ind i for meget tekniske detaljer giver argumentet chunksize
os mulighed for at indlæse data i bidder, hvor hver del har en størrelse på 900 rækker data i vores eksempel. Antallet af bidder bestemmes automatisk af programmet. I betragtning af at vores csv-fil indeholder 2.618 rækker, forventer vi at se 2618 / 900 = 2.9, hvilket betyder 3 bidder i alt. De to første stykker indeholder 900 rækker, og den sidste del indeholder de resterende 818 rækker.
lad os se om det er sandt.

vi har indlæst og opdelt en fil i mindre stykker, næste lad os gemme dem i mindre individuelle filer.
i = 1for file in df: file.to_csv(f'file_{i}.csv') i += 1

sætte det hele sammen
import pandas as pd df = pd.read_csv('large_data.csv', chunksize = 900)df_small = pd.read_csv('large_data.csv', nrows = 1000)i = 1for file in df: print(file.shape) file.to_csv(f'file_{i}.csv') i += 1
vi brugte kun 8 linjer kode til at løse, hvad synes umuligt at opnå i udmærke. Jeg håber, at du begynder at elske Python Kristian!