hoe grote csv-of tekstbestanden te openen

post Views: 3,861

het probleem

als u met Excel werkt, hebt u waarschijnlijk geprobeerd grote csv-of tekstbestanden te openen, maar misschien is het niet gelukt om ze te openen. Mijn collega heeft ooit een groot csv-bestand van 8GB ontvangen. Hij wilde een kijkje nemen op de inhoud, maar hij kon het niet openen met behulp van een programma dat hij probeerde, Kladblok, Excel, enz. Het bestand was gewoon te groot voor het programma om zelfs maar te beginnen.

dus vroeg hij mij om hulp. Zijn verzoek was relatief eenvoudig: open het 8GB grote csv-bestand en potentieel kijken naar gegevens in de eerste paar duizend regels. Deze schijnbaar onmogelijke taak is gemakkelijk wanneer u de juiste tool – Python kiezen.

onze aanpak

we zullen eerst manieren onderzoeken om de inhoud van de grote csv te onderzoeken. Dan splitsen we het grote bestand op in kleine bestanden, zodat de gegevens werkbaar worden (te openen?) in Excel.

voor demonstratiedoeleinden gebruiken we geen 8GB groot csv-bestand; in plaats daarvan gebruiken we een kleiner bestand met slechts 2.600 rijen data. Als u wilt volgen, voel je vrij om het voorbeeld te downloaden vanaf hier.

de oplossing

Zoals altijd beginnen we met het importeren van de benodigde bibliotheken, in deze oefening hebben we alleen pandasnodig.

import pandas as pd 
df = pd.read_csv('large_data.csv')
df_small = pd.read_csv('large_data.csv', nrows = 1000)

pd.read_csv() stelt ons in staat om elke te lezen .csv-bestand in Python, ongeacht de bestandsgrootte-meer over dit punt later. Een csv-bestand is een door komma ‘ s gescheiden waardenbestand, wat eigenlijk een tekstbestand is. Deze panda-methode heeft een optioneel argument nrows, dat het aantal rijen specificeert dat u wilt laden.

de eerste variabele df heeft alles in het csv-bestand geladen. Terwijl de tweede variabele df_small alleen de eerste 1000 rijen gegevens heeft geladen. We kunnen dat controleren door het .shape attribuut aan te roepen.

grootte (#van rijen, # van kolommen) van de twee dataframes

zoals hierboven getoond, de “large_data.csv ” bestand bevat 2618 rijen en 11 kolommen met gegevens in totaal. En we kunnen ook bevestigen dat we in de df_small variabele alleen de eerste 1.000 rijen met gegevens hebben geladen, ook 11 kolommen.

door df_small.head() te typen worden de eerste 5 rijen gegevens binnen het df_small gegevensframe weergegeven. We kunnen een kijkje nemen in het grote bestand op deze manier!

wat als we vervolgens het gegevensbestand willen kunnen openen met alleen Excel? Mensen houden van Excel, dus we moeten ons eraan houden.

hoewel we magic niet kunnen gebruiken om Excel toe te staan dit 8GB bestand te openen, kunnen we “verdeel en heers” door het op te splitsen in kleinere bestanden. Bijvoorbeeld, 8 bestanden met 1GB elk, of 16 bestanden met 500MB elk. Een moderne versie van Excel kan deze bestandsgroottes gemakkelijk aan.

deze keer zullen we het dataframe iets anders laden – met een optioneel argument chunksize. Nogmaals, voor demonstratiedoeleinden gebruiken we een veel kleiner bestand.

df = pd.read_csv('large_data.csv', chunksize = 900)

zonder in te veel technische details te treden, stelt het chunksize argument ons in staat om gegevens in brokken te laden, waarbij elk brokje een grootte heeft van 900 rijen met gegevens in ons voorbeeld. Het aantal chunks wordt automatisch bepaald door het programma. Gezien het feit dat ons csv-bestand 2.618 rijen bevat, verwachten we 2618 / 900 = 2.9, wat 3 brokken in totaal betekent. De eerste twee brokken bevatten 900 rijen, en de laatste brokken bevatten de resterende 818 rijen.

eens kijken of dat waar is.

kleinere dataframegrootte

we hebben met succes een bestand in kleinere stukken geladen en opgesplitst, laten we ze vervolgens opslaan in kleinere individuele bestanden.

i = 1for file in df: file.to_csv(f'file_{i}.csv') i += 1
het originele bestand afbreken en opslaan in kleine bestanden

alles samenvoegen

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

we gebruikten slechts 8 regels code om op te lossen wat onmogelijk lijkt te bereiken in Excel. Ik hoop dat je begint te houden van Python❤ ️ 🐍!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.