Lewati ke konten utama

Cara Menyimpan Pandas DataFrame ke CSV

Di Pandas, Anda dapat menyimpan DataFrame ke file CSV menggunakan metode df.to_csv('your_file_name.csv', index=False), di mana df adalah DataFrame Anda dan index=False mencegah penambahan kolom indeks.
· 7 mnt Baca

Jelajahi bersama AI

Jika Anda membuat DataFrame atau memodifikasi yang sudah ada, Anda mungkin ingin mengekspornya agar orang lain dapat menggunakannya, atau menyimpannya untuk pekerjaan Anda di masa mendatang. Misalnya, Anda mungkin harus mengirimkan prediksi dari proyek machine learning kepada penguji Anda atau mengirim dataset yang telah dimodifikasi kepada rekan kerja.

Di Python, Anda dapat mengekspor DataFrame sebagai file CSV menggunakan metode .to_csv() milik Pandas.

Dalam artikel ini, saya akan memandu Anda melalui langkah-langkah utama prosesnya dan menjelaskan parameter metodenya.

Jika Anda ingin mempelajari lebih lanjut tentang Pandas, lihat kursus ini tentang Manipulasi Data dengan Pandas.

Saya akan mulai dengan jawaban singkat bagi Anda yang sedang terburu-buru, lalu masuk ke detailnya.

Jawaban Singkat: Cara Menyimpan Pandas DataFrame ke CSV

Untuk menyimpan Pandas DataFrame sebagai CSV, gunakan metode DataFrame.to_csv(): 

df.to_csv('your_file_name.csv', index=False)

Ganti 'your_file_name.csv' dengan nama dan path yang diinginkan untuk file Anda. Argumen index=False mencegah Pandas menambahkan kolom indeks ke CSV Anda.

Membuat Pandas DataFrame

Sekarang, mari kita lihat jawaban yang lebih panjang. Alih-alih membuat DataFrame dari nol, saya akan mengimpor sebuah dataset, memodifikasinya, dan menyimpan DataFrame hasilnya dalam format CSV. Langkah pertama adalah mengimpor pustaka yang diperlukan:

import pandas as pd
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler

Lalu, kita dapat mengimpor sebuah dataset seaborn. Dataset yang diimpor sudah berupa Pandas DataFrame, jadi kita tidak perlu mengubahnya.

# We’ll import the 'titanic' dataset from seaborn
df = sns.load_dataset('titanic')
print(df.head())
survived  pclass     sex   age  sibsp  parch     fare embarked  class  
0         0       3    male  22.0      1      0   7.2500        S  Third   
1         1       1  female  38.0      1      0  71.2833        C  First   
2         1       3  female  26.0      0      0   7.9250        S  Third   
3         1       1  female  35.0      1      0  53.1000        S  First   
4         0       3    male  35.0      0      0   8.0500        S  Third 
    who  adult_male deck  embark_town alive  alone  
0    man        True  NaN  Southampton    no  False  
1  woman       False    C    Cherbourg   yes  False  
2  woman       False  NaN  Southampton   yes   True  
3  woman       False    C  Southampton   yes  False  
4    man        True  NaN  Southampton    no   True  

Memodifikasi Pandas DataFrame

Sekarang, mari lakukan beberapa pemrosesan untuk mendapatkan DataFrame baru. Karena tujuan saya adalah mengeksplorasi metode .to_csv() dari Pandas, saya hanya akan melakukan normalisasi min-max pada variabel numerik.

scaler = MinMaxScaler()
# Choose the columns that have integer or float data-types                                           
numerical columns - df.select_dtypes(include=['float64','int64']).columns
new_df = df.copy()
# The min-max scaler will represent all numbers on a 0-to-1 scale
new_df[numerical_columns] = scaler.fit_transform(df[numerical_columns])
print(new_df.head())
survived  pclass     sex       age  sibsp  parch      fare embarked    
0       0.0     1.0    male  0.271174  0.125    0.0  0.014151        S  
1       1.0     0.0  female  0.472229  0.125    0.0  0.139136        C  
2       1.0     1.0  female  0.321438  0.000    0.0  0.015469        S  
3       1.0     0.0  female  0.434531  0.125    0.0  0.103644        S  
4       0.0     1.0    male  0.434531  0.000    0.0  0.015713        S  
class   who  adult_male deck  embark_town alive  alone  
Third   man        True  NaN  Southampton    no  False  
First   woman      False   C    Cherbourg   yes  False  
Third   woman      False NaN  Southampton   yes   True  
First   woman      False   C  Southampton   yes  False  
Third   man        True  NaN  Southampton    no   True  

Menyimpan Pandas DataFrame sebagai CSV

Kita akan menggunakan metode DataFrame.to_csv() untuk menyimpan DataFrame yang telah dimodifikasi sebagai file CSV.

new_df.to_csv('new_titanic.csv') 

Ini akan menyimpan file CSV di direktori saat ini. Jika Anda perlu penyegar ingatan, baca tutorial ini tentang cara mendapatkan direktori saat ini di Python.

Cara saya memanggil metode ini memastikan semua parameter diatur ke nilai defaultnya. Sekarang, saya akan memaparkan parameter-parameter tersebut dan bagaimana Anda dapat mengubah nilainya sesuai kebutuhan.

Penjelasan Parameter DataFrame.to_csv()

Berikut adalah metode .to_csv() yang sama dengan semua parameternya:

new_df.to_csv(
    path_or_buf='new_titanic.csv',
    sep=',',
    na_rep='',
    float_format=None,
    columns=[],
    header=True,
    index=True,
    index_label=None,
    mode='w',
    encoding='utf-8',
    quoting=csv.QUOTE_MINIMAL,
    lineterminator=os.linesep,
    storage_options={},
    compression='infer',
    quotechar='',
    chunksize=None,
    date_format=None,
    doublequote=True,
    escapechar=None,
    decimal='.',
    errors='strict'
)

Beberapa parameter ini bersifat opsional, seperti columns, encoding, quoting, lineterminator dan storage_options, jadi saya hanya menetapkan nilai untuknya, tidak harus nilai default.

Parameter pertama bisa berupa string, yang akan menjadi nama file, atau objek file. Lihat contoh ini:

with open('new_titanic.csv',  'w', encoding = 'utf=8') as file:
     new_df.to_csv(file)

Pemisah dan nilai yang hilang

Parameter berikutnya adalah pemisah, yang mengacu pada bagaimana data dipisahkan. Pemisah default adalah koma, tetapi kita dapat mengubahnya menjadi tab atau titik koma. Pemisah tab atau titik koma bisa berguna ketika data ekspor Anda harus dalam format tertentu. Selain itu, untuk data yang mengandung koma, seperti teks, menggunakan koma sebagai pemisah dapat menimbulkan perubahan yang tidak diinginkan.

Misalnya, jika Anda memiliki ‘Hello, world’ sebagai sebuah datapoint, maka jika Anda ingin menggunakan pemisah koma, Anda juga memerlukan tanda kutip untuk menjaganya tetap sebagai satu datapoint. Menggunakan pemisah tab atau titik koma bisa menjadi pilihan yang lebih baik karena mungkin memakan lebih sedikit memori daripada menggunakan koma dan tanda kutip.

new_df.to_csv('new_titanic.csv', sep = '\t')
new_df_tab = pd.read_csv('new_titanic.csv')
0\t0\t3\tmale\t22.0\t1\t0\t7.25\tS\tThird\tman...                                                                 
1\t1\t1\tfemale\t38.0\t1\t0\t71.2833\tC\tFirst...                                                                 
2\t1\t3\tfemale\t26.0\t0\t0\t7.925\tS\tThird\t...                                                                 
3\t1\t1\tfemale\t35.0\t1\t0\t53.1\tS\tFirst\tw...                                                                 
4\t0\t3\tmale\t35.0\t0\t0\t8.05\tS\tThird\tman... 

Parameter ketiga, na_rep, mengacu pada representasi nilai yang hilang. Pilihan umum adalah membiarkan sel kosong untuk memasukkan ‘NaN’ atau ‘Na’, tetapi Anda juga dapat memasukkan string kustom. Saya akan memasukkan ‘Datacamp’ dalam contoh berikut untuk setiap nilai yang hilang.

new_df.to_csv('new_titanic.csv', na_rep='Datacamp')
new_df_datacamp = pd.read_csv('new_titanic.csv') 
new_df_datacamp = pd.DataFrame(new_df_datacamp) 
#find the missing values
missing_values = new_df_datacamp.isnull().sum()
print(missing_values)
survived         0
pclass           0
sex              0
age            177
sibsp            0
parch            0
fare             0
embarked         2
class            0
who              0
adult_male       0
deck           688
embark_town      2
alive            0
alone            0

Menangani kolom dan indeks

Mari kita lihat bagaimana nilai yang hilang direpresentasikan untuk kolom age:

print(new_df_datacamp['age'][:10])
     0.2711736617240512
     0.4722292033174164
    0.32143754712239253
     0.4345312892686604
     0.4345312892686604
               Datacamp
     0.6732847449107816
    0.01985423473234481
    0.33400351847197784
    0.17064589092736868

Jika Anda menginginkan jumlah desimal yang lebih sedikit, gunakan parameter float_format untuk menentukan jumlah desimal. Di sini, kita akan menggunakan tiga saja.

new_df.to_csv('new_titanic.csv', na_rep='Datacamp', float_format='%.3f')
new_df_datacamp = pd.read_csv('new_titanic.csv')
new_df_datacamp = pd.DataFrame(new_df_datacamp)
print(new_df_datacamp['age'][:10])
0.271
0.472
0.321
0.435
0.435
Datacamp
0.673
0.020
0.334
0.171

Jika Anda tidak ingin melihat indeks, setel parameter index menjadi False.

Anda juga dapat memutuskan apakah akan mempertahankan nama kolom, menggunakan parameter header dan menyetelnya ke True atau False, yang merupakan cara yang tepat (atau Anda dapat menetapkan nama untuk kolom).

Parameter columns memungkinkan Anda memilih kolom mana yang akan dipertahankan. Parameter index_label memungkinkan Anda menetapkan nama untuk kolom indeks atau daftar nama jika Anda memiliki beberapa indeks.

new_df.to_csv(
    'new_titanic.csv', 
    index=True, 
    header=True, 
    columns=['age', 'alive'], 
    index_label='Index'
)
new_df = pd.read_csv('new_titanic.csv')
new_df = pd.DataFrame(new_df)
print(new_df.head())
  Index       age alive
      0  0.271174    no
      1  0.472229   yes
      2  0.321438   yes
      3  0.434531   yes
      4  0.434531    no

Pembukaan file, encoding, dan kompresi

Parameter mode memungkinkan Anda memutuskan apa yang harus dilakukan saat Anda sudah memiliki file CSV dengan nama yang sama seperti yang Anda buat. Jika Anda menyetel parameter ke ‘w’ dan sudah memiliki file new_titanic.csv, file yang Anda buat akan menggantikan yang lama. Jika Anda menyetelnya ke ‘x’, file baru dibuat hanya jika tidak ada file yang ada dengan nama yang sama. Terakhir, jika Anda menyetel parameter ke ‘a’, file baru akan ditambahkan ke file lama dengan nama yang sama (mungkin Anda hanya ingin menambahkan beberapa baris).

Parameter encoding menetapkan encoding untuk file baru. Jika data Anda berisi karakter khusus, seperti huruf dari alfabet lain, Anda dapat menyetelnya ke ‘utf-8’ atau encoding lainnya.

Parameter compression menetapkan cara file baru dikompresi. Secara default, disetel ke ‘infer’, yang berarti mengompresi file sesuai ekstensi yang ditentukan, tetapi Anda juga dapat menentukan ekstensi yang Anda inginkan.

# Infer the compression
new_df.to_csv('new_titanic.csv.gz')
# Specify the compression explicitly
new_df.to_csv('new_data.csv.gz', compression='gzip')
# Specify the compression via a dictionary
new_df.to_csv(
    'new_data.zip', 
    compression={
        'method': 'zip', 
        'archive_name': 'data.csv'
    }
)

Cara menggunakan quoting

Parameter quoting menetapkan jenis data yang akan diberi tanda kutip. Seperti yang saya sebutkan sebelumnya, saat Anda memiliki pemisah koma dan juga sel yang berisi koma (seperti teks), Anda harus memutuskan apa yang harus diberi tanda kutip.

# Default value, quotes only fields with special characters or separators like tabs and commas
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_MINIMAL)
# Quotes all fields
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_ALL)
# Quotes only fields with non-numeric values
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONNUMERIC)
# No field is quoted
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONE)

Ukuran chunk dan data tanggal-waktu

Parameter chunksize menentukan berapa banyak bagian file yang akan ditulis sekaligus. Dengan membiarkan nilai default, semua baris ditulis sekaligus, tetapi Anda dapat menentukan sebuah angka, yang berguna ketika file sangat besar.

Parameter date_format menetapkan representasi objek datetime. Anda dapat menentukannya menggunakan format strftime.

# Write DataFrame to CSV with dates formatted as 'MM/DD/YYYY'
new_df.to_csv('new_titanic.csv', date_format='%m/%d/%Y')
# You can set datetime objects up to seconds
new_df.to_csv('new_titanic.csv', date_format='%Y-%m-%d %H:%M:%S')

Kesimpulan

Semoga sekarang Anda siap mengekspor DataFrame dalam format yang sesuai dengan kebutuhan Anda!

Saya mendorong Anda untuk terus belajar—berikut beberapa sumber yang bisa Anda coba:

Tudor Mărginean

Penulis

Tudor Mărginean

Saya sedang menyelesaikan gelar magister di bidang data science di University of Bucharest, Rumania, dengan tesis tentang prediksi arus lalu lintas menggunakan berbagai model berbasis Graph Neural Networks. Keahlian utama yang saya pelajari meliputi pembersihan dan visualisasi data di Python dan Power BI, prapemrosesan untuk berbagai tugas machine learning, serta membangun model dengan PyTorch (atau TensorFlow). Pada saat yang sama, sebagai mahasiswa doktoral (PhD) di bidang filsafat, saya mengajar seminar tentang logika orde pertama sambil mengerjakan tesis mengenai teori konfirmasi Bayesian. Saya bersemangat untuk mempelajari lebih banyak tentang data dan pengembangan model, serta mengajarkan apa yang saya pelajari.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026