Jak otworzyć duże pliki csv lub tekstowe

wyświetleń wpisu: 3,861

Problem

jeśli pracujesz z programem Excel, w pewnym momencie prawdopodobnie próbowałeś otworzyć duże pliki csv lub tekstowe, ale być może nie udało ci się ich otworzyć. Mój kolega otrzymał kiedyś duży plik csv o pojemności 8GB. Chciał rzucić okiem na treść, ale nie mógł jej otworzyć za pomocą żadnego programu, który wypróbował, Notatnika, Excela itp. Plik był po prostu zbyt duży, aby program mógł się nawet uruchomić.

więc zwrócił się do mnie o pomoc. Jego prośba była stosunkowo prosta: otwórz duży plik csv o pojemności 8 GB i sprawdź dane w pierwszych kilku tysiącach linii. To pozornie niemożliwe zadanie jest łatwe, gdy wybierzesz odpowiednie narzędzie-Python.

nasze podejście

najpierw zbadamy sposoby sprawdzania zawartości dużego pliku csv. Następnie podzielimy duży plik na małe pliki, aby dane stały się wykonalne (otwieralne?) w Excelu.

do celów demonstracyjnych nie użyjemy dużego pliku csv o pojemności 8 GB; zamiast tego użyjemy mniejszego pliku z zaledwie 2600 rzędami danych. Jeśli chcesz śledzić dalej, możesz pobrać przykład stąd.

rozwiązanie

jak zawsze zaczynamy od zaimportowania niezbędnych bibliotek, w tym ćwiczeniu potrzebujemy tylko 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() pozwala nam odczytać dowolny .plik csv do Pythona, niezależnie od rozmiaru pliku-więcej na ten temat później. Plik csv to oddzielony przecinkami plik wartości, który jest w zasadzie plikiem tekstowym. Ta metoda pandas ma opcjonalny argument nrows, który określa liczbę wierszy, które chcesz załadować.

pierwsza zmienna df załadowała wszystko do pliku csv. Natomiast druga zmienna df_small załadowała tylko pierwsze 1000 wierszy danych. Możemy to sprawdzić wywołując atrybut .shape.

rozmiar (#wierszy, # kolumn) dwóch ramek danych

jak pokazano powyżej, „large_data.plik csv ” zawiera łącznie 2618 wierszy i 11 kolumn danych. Możemy również potwierdzić, że w zmiennej df_small załadowaliśmy tylko pierwsze 1000 wierszy danych, również 11 kolumn.

wpisanie df_small.head() pokazuje 5 pierwszych wierszy danych w ramce danych df_small. Możemy zajrzeć do dużego pliku w ten sposób!

następnie co, jeśli chcemy być w stanie otworzyć plik danych tylko za pomocą programu Excel? Ludzie lubią Excela, więc musimy się go trzymać!

chociaż nie możemy użyć magii, aby umożliwić Excelowi otwarcie tego pliku 8GB, możemy „podzielić i podbić”, rozkładając go na mniejsze pliki. Na przykład 8 plików po 1 GB każdy lub 16 plików po 500 MB każdy. Nowoczesna wersja programu Excel może łatwo obsłużyć te rozmiary plików.

tym razem załadujemy ramkę danych nieco inaczej – z opcjonalnym argumentem chunksize. Ponownie, w celach demonstracyjnych, używamy znacznie mniejszego pliku.

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

bez wdawania się w zbyt wiele szczegółów technicznych, argument chunksize pozwala nam załadować dane w kawałkach, przy czym każdy kawałek ma rozmiar 900 wierszy danych w naszym przykładzie. Liczba kawałków jest określana automatycznie przez program. Biorąc pod uwagę, że nasz plik csv zawiera 2618 wierszy, spodziewamy się zobaczyć 2618 / 900 = 2.9, co oznacza w sumie 3 kawałki. Pierwsze dwa kawałki zawierają 900 wierszy, a ostatni fragment zawiera Pozostałe 818 wierszy.

zobaczmy czy to prawda.

mniejsze rozmiary ramek danych

pomyślnie załadowaliśmy i podzieliliśmy jeden plik na mniejsze części, a następnie zapiszmy je na mniejsze pojedyncze pliki.

i = 1for file in df: file.to_csv(f'file_{i}.csv') i += 1
rozkładanie oryginalnego pliku i zapisywanie go na małe pliki

składając to wszystko razem

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

użyliśmy tylko 8 linii kodu, aby rozwiązać to, co wydaje się niemożliwe do osiągnięcia w programie Excel. Mam nadzieję, że zaczynasz kochać Pythona❤ ️ 🐍!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.