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 titleZapisywanie 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 exactlySzybkie 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
- Odczytywanie plików CSV
- Odczytywanie plików Excel i JSON
- Zapisywanie DataFrame do plików
- Odczytywanie z adresów URL i StringIO