0Pricing
Pandas & NumPy Academy · Lekcja

Zapisywanie DataFrame do plików

Eksportować oczyszczony obiekt DataFrame do plików CSV i Excel za pomocą to_csv i to_excel, kontrolując indeks oraz format liczb zmiennoprzecinkowych

Zapisywanie DataFrame do plików to bezpłatna lekcja Pandas & NumPy Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Pandas & NumPy Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Dlaczego eksportowanie ma znaczenie

Analiza danych rzadko kończy się w Pythonie. Trzeba udostępniać oczyszczone zbiory danych interesariuszom, przekazywać wyniki do innych narzędzi lub archiwizować przetworzone dane, aby zapewnić odtwarzalność. Pandas udostępnia funkcje to_csv(), to_excel(), to_json() i to_parquet() — odpowiadające funkcjom odczytu i akceptujące większość tych samych parametrów konfiguracyjnych.

import pandas as pd

df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
df.to_csv('results.csv')
df.to_excel('results.xlsx')
df.to_json('results.json', orient='records')

to_csv(): pułapka związana z indeksem

Domyślnie to_csv() zapisuje indeks wierszy jako pierwszą kolumnę, tworząc kolumnę unnamed: 0 przy ponownym odczycie pliku. Należy przekazać index=False, aby pominąć indeks — niemal zawsze jest to właściwy wybór, chyba że sam indeks zawiera istotne dane, takie jak daty. Zawsze należy określać index=False, chyba że istnieje konkretny powód, aby uwzględnić indeks.

import pandas as pd

df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})

# Include index (default -- creates 'Unnamed: 0' when re-read)
df.to_csv('with_index.csv')

# Exclude index (recommended)
df.to_csv('clean.csv', index=False)

Kontrolowanie separatora i kodowania

Należy przekazać sep=, aby zapisać plik rozdzielany tabulatorami lub średnikami. Parametr encoding= służy do określenia UTF-8 lub innego zestawu znaków — jest niezbędny, gdy wartości kolumn zawierają znaki spoza ASCII, takie jak znaki diakrytyczne lub znaki chińskie. encoding='utf-8-sig' dodaje BOM (znacznik kolejności bajtów), zapewniając zgodność z Excelem w systemie Windows.

import pandas as pd

df = pd.DataFrame({'name': ['Müller', 'Tanaka'], 'val': [1, 2]})
# Tab-separated, UTF-8
df.to_csv('output.tsv', sep='\t', encoding='utf-8', index=False)

# Excel-compatible UTF-8 with BOM
df.to_csv('for_excel.csv', encoding='utf-8-sig', index=False)

Kontrolowanie formatowania liczb zmiennoprzecinkowych

Domyślnie Pandas zapisuje liczby zmiennoprzecinkowe z pełną precyzją. Należy użyć float_format='%.2f', aby ograniczyć zapis do 2 miejsc po przecinku — jest to ważne w przypadku danych finansowych, gdzie dodatkowe miejsca po przecinku wyglądają nieprawidłowo dla osób odczytujących dane. Parametr na_rep='NULL' lub na_rep='' pozwala określić sposób zapisywania wartości NaN w pliku wyjściowym.

import pandas as pd
import numpy as np

df = pd.DataFrame({'price': [9.99, np.nan, 14.123456],
                   'qty': [1, 2, 3]})
df.to_csv('prices.csv',
          index=False,
          float_format='%.2f',
          na_rep='N/A')

to_excel(): zapisywanie arkusza

df.to_excel('file.xlsx', sheet_name='Data', index=False) zapisuje obiekt DataFrame w skoroszycie Excel. Podobnie jak w przypadku to_csv(), należy ustawić index=False, chyba że indeks ma znaczenie. Parametry startrow= i startcol= umożliwiają umieszczenie tabeli w wybranym miejscu arkusza — jest to przydatne do dodania wiersza tytułu nad danymi.

import pandas as pd

df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
df.to_excel('report.xlsx',
            sheet_name='Sales',
            index=False,
            startrow=1)  # leave row 0 for a title

Zapisywanie wielu arkuszy za pomocą ExcelWriter

Aby zapisać wiele obiektów DataFrame w różnych arkuszach tego samego skoroszytu, należy użyć pd.ExcelWriter jako menedżera kontekstu. Dla każdego obiektu DataFrame w bloku with należy wywołać df.to_excel(writer, sheet_name='Name'). Skoroszyt zostanie sfinalizowany i zapisany po wyjściu z kontekstu. Pozwala to uniknąć tworzenia wielu oddzielnych plików dla powiązanych tabel.

import pandas as pd

df1 = pd.DataFrame({'a': [1, 2]})
df2 = pd.DataFrame({'b': [3, 4]})

with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

to_json(): eksportowanie JSON-a

df.to_json() serializuje obiekt DataFrame do JSON-a. Parametr orient= działa analogicznie jak w read_json: należy użyć 'records' w przypadku listy słowników wierszy (najlepsza współpraca z innymi systemami), 'columns' w przypadku słownika tablic kolumn lub 'index' w przypadku słownika, którego kluczami są etykiety wierszy. Parametr indent=2 pozwala uzyskać formatowanie czytelne dla człowieka.

import pandas as pd

df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
print(df.to_json(orient='records', indent=2))
# [
#   {"name": "A", "score": 90},
#   {"name": "B", "score": 75}
# ]

Dopisywanie do istniejącego pliku

Aby dopisać wiersze do istniejącego pliku CSV bez jego nadpisywania, należy otworzyć plik w trybie dopisywania za pomocą mode='a' i ustawić header=False, aby uniknąć powielania wiersza nagłówka. W przypadku Excela należy użyć ExcelWriter z mode='a'. W dużych potokach przetwarzania strumieniowego należy dopisywać dane fragmentami i zapisywać nagłówek tylko dla pierwszego fragmentu.

import pandas as pd

df_new = pd.DataFrame({'a': [5, 6], 'b': [7, 8]})
# Append to existing file, skip writing header
df_new.to_csv('existing.csv',
              mode='a',
              header=False,
              index=False)

Wybieranie kolumn przed eksportem

Dobrym zwyczajem przed eksportem jest wybranie tylko tych kolumn, których potrzebuje odbiorca, oraz uporządkowanie wierszy w logicznej kolejności. Dzięki temu plik wyjściowy jest przejrzystszy i nie dochodzi do przypadkowego ujawnienia wewnętrznych kolumn, takich jak wewnętrzne identyfikatory, zakodowane cechy czy flagi debugowania. W tym samym wyrażeniu potoku przed zapisem należy użyć wyboru za pomocą nawiasów kwadratowych oraz sort_values().

import pandas as pd

df = pd.DataFrame({'id': [3,1,2],
                   'name': ['C','A','B'],
                   '_internal': [9,7,8]})

(df[['id', 'name']]
   .sort_values('id')
   .to_csv('export.csv', index=False))

Weryfikowanie zapisanego pliku

Po zapisaniu należy zawsze ponownie odczytać plik i zweryfikować: sprawdzić shape, nazwy kolumn oraz kilka przykładowych wartości. W potokach CI należy porównać sumy kontrolne. W przypadku krytycznych eksportów finansowych należy sprawdzić, czy zagregowane sumy są zgodne. Pozwala to wykryć problemy z kodowaniem, utratę precyzji liczb zmiennoprzecinkowych oraz problemy z indeksem, zanim plik trafi do kolejnego odbiorcy.

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df.to_csv('/tmp/check.csv', index=False)

df_check = pd.read_csv('/tmp/check.csv')
assert df_check.shape == df.shape, 'Row/column count mismatch'
assert list(df_check.columns) == list(df.columns)
print('Export verified OK')

Parquet: lepsza alternatywa dla danych

W przypadku dużych analitycznych zbiorów danych warto rozważyć format Parquet zamiast CSV. Parquet przechowuje dane w formacie kolumnowym, obsługuje kompresję, dokładnie zachowuje typy danych i odczytuje dane 10–100 razy szybciej podczas zapytań analitycznych. Zapis wykonuje się za pomocą df.to_parquet('data.parquet'), a odczyt za pomocą pd.read_parquet('data.parquet'). Do działania wymaga zainstalowania pyarrow lub fastparquet.

import pandas as pd

df = pd.DataFrame({'a': range(1000000), 'b': range(1000000)})
df.to_parquet('data.parquet', index=False)

df2 = pd.read_parquet('data.parquet')
print(df2.dtypes)  # dtypes preserved exactly

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat zapisywania DataFrame do plików z tego rozdziału.

Podsumowanie rozdziału

W tym rozdziale nauczyłeś się, że: to_csv() i to_excel() eksportują obiekty DataFrame, a obie metody domyślnie uwzględniają indeks — aby uzyskać przejrzysty wynik, zawsze ustawiaj index=False, ExcelWriter umożliwia zapisywanie wielu obiektów DataFrame na osobnych arkuszach w jednym skoroszycie, a Parquet jest szybszą i zajmującą mniej miejsca alternatywą dla CSV w przypadku dużych analitycznych zbiorów danych. W następnej części wczytamy zdalne pliki CSV z adresów URL i przeanalizujemy znajdujące się w pamięci ciągi CSV za pomocą io.StringIO.

Często zadawane pytania

Czy lekcja „Zapisywanie DataFrame do plików” jest bezpłatna?

Tak — pełny tekst „Zapisywanie DataFrame do plików” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Pandas & NumPy Academy, przejdź na CoddyKit PRO. Kurs Pandas & NumPy Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zapisywanie DataFrame do plików”?

Eksportować oczyszczony obiekt DataFrame do plików CSV i Excel za pomocą to_csv i to_excel, kontrolując indeks oraz format liczb zmiennoprzecinkowych Ćwiczysz Pandas & NumPy Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Pandas & NumPy Academy?

Nie wymagamy żadnego doświadczenia. Pandas & NumPy Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Zapisywanie DataFrame do plików”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Pandas & NumPy Academy?

Tak. Każda lekcja Pandas & NumPy Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Odczytywanie plików CSV
  2. Odczytywanie plików Excel i JSON
  3. Zapisywanie DataFrame do plików
  4. Odczytywanie z adresów URL i StringIO
← Powrót do Pandas & NumPy Academy