Chuyển đến nội dung chính

Cách lưu một Pandas DataFrame thành CSV

Trong Pandas, bạn có thể lưu một DataFrame vào tệp CSV bằng phương thức df.to_csv('your_file_name.csv', index=False), trong đó df là DataFrame của bạn và index=False giúp không thêm cột chỉ mục.
Đã cập nhật 5 thg 10, 2026  · 7 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Khi bạn tạo một DataFrame hoặc chỉnh sửa một DataFrame hiện có, bạn có thể muốn xuất nó để người khác có thể làm việc với dữ liệu đó, hoặc để lưu lại cho công việc sau này của bạn. Ví dụ, bạn có thể cần nộp một kết quả dự đoán từ dự án machine learning cho giảng viên chấm điểm hoặc gửi một tập dữ liệu đã chỉnh sửa cho đồng nghiệp.

Trong Python, bạn có thể xuất một DataFrame dưới dạng tệp CSV bằng phương thức .to_csv() của Pandas.

Trong bài viết này, tôi sẽ hướng dẫn bạn qua các bước chính của quy trình và giải thích các tham số của phương thức này.

Nếu bạn muốn tìm hiểu thêm về Pandas, hãy xem khóa học về Xử lý dữ liệu với Pandas.

Tôi sẽ bắt đầu với câu trả lời nhanh cho những bạn đang vội, sau đó đi vào chi tiết.

Câu trả lời ngắn: Cách lưu Pandas DataFrame thành CSV

Để lưu một Pandas DataFrame thành CSV, hãy dùng phương thức DataFrame.to_csv(): 

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

Hãy thay 'your_file_name.csv' bằng tên và đường dẫn mong muốn cho tệp của bạn. Tham số index=False ngăn Pandas thêm một cột chỉ mục vào CSV.

Tạo một Pandas DataFrame

Bây giờ, hãy xem câu trả lời đầy đủ hơn. Thay vì tạo DataFrame từ đầu, tôi sẽ nhập một tập dữ liệu, chỉnh sửa nó và lưu DataFrame kết quả ở định dạng CSV. Bước đầu tiên là nhập các thư viện cần thiết:

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

Sau đó, chúng ta có thể nhập một tập dữ liệu của seaborn. Tập dữ liệu được nhập đã là một Pandas DataFrame, nên chúng ta không cần chuyển đổi gì thêm.

# Chúng ta sẽ nhập tập dữ liệu 'titanic' từ 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  

Chỉnh sửa một Pandas DataFrame

Giờ hãy xử lý một chút để thu được DataFrame mới. Vì mục đích của tôi là tìm hiểu phương thức .to_csv() của Pandas, tôi sẽ chỉ chuẩn hóa min-max trên các biến số.

scaler = MinMaxScaler()
# Chọn các cột có kiểu dữ liệu số nguyên hoặc số thực                                           
numerical columns - df.select_dtypes(include=['float64','int64']).columns
new_df = df.copy()
# Bộ biến đổi min-max sẽ biểu diễn mọi con số trên thang 0 đến 1
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  

Lưu một Pandas DataFrame thành CSV

Chúng ta sẽ dùng phương thức DataFrame.to_csv() để lưu DataFrame đã chỉnh sửa thành tệp CSV.

new_df.to_csv('new_titanic.csv') 

Thao tác này sẽ lưu tệp CSV trong thư mục hiện tại. Nếu bạn cần ôn lại, hãy đọc hướng dẫn này về cách lấy thư mục hiện tại trong Python.

Cách tôi gọi phương thức này đảm bảo tất cả tham số đều được đặt về giá trị mặc định. Giờ tôi sẽ trình bày các tham số và cách bạn có thể thay đổi giá trị của chúng theo nhu cầu.

Giải thích các tham số của DataFrame.to_csv()

Dưới đây là cùng phương thức .to_csv() với đầy đủ các tham số:

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'
)

Một số tham số là tùy chọn, như columns, encoding, quoting, lineterminator và storage_options, nên tôi chỉ đặt giá trị cho chúng, không nhất thiết là giá trị mặc định.

Tham số đầu tiên có thể là một chuỗi, sẽ là tên tệp, hoặc một đối tượng tệp. Xem ví dụ sau:

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

Dấu phân tách và giá trị khuyết

Tham số tiếp theo là dấu phân tách, dùng để chỉ cách dữ liệu được ngăn cách. Dấu phân tách mặc định là dấu phẩy, nhưng chúng ta có thể đổi thành tab hoặc dấu chấm phẩy. Tab hoặc dấu chấm phẩy hữu ích khi dữ liệu xuất cần ở một định dạng nhất định. Ngoài ra, với dữ liệu chứa dấu phẩy, như văn bản, dùng dấu phẩy làm dấu phân tách có thể gây ra thay đổi không mong muốn.

Ví dụ, nếu bạn có ‘Hello, world’ làm một điểm dữ liệu, thì nếu muốn dùng dấu phẩy làm phân tách, bạn cũng cần dấu ngoặc kép để giữ nó là một điểm dữ liệu đơn. Dùng tab hoặc dấu chấm phẩy có thể là lựa chọn tốt hơn vì có thể tốn ít bộ nhớ hơn so với dùng dấu phẩy kèm dấu ngoặc kép.

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... 

Tham số thứ ba, na_rep, chỉ cách biểu diễn các giá trị khuyết. Lựa chọn thường gặp là để trống ô hoặc chèn ‘NaN’ hay ‘Na’, nhưng bạn cũng có thể chèn chuỗi tùy chỉnh. Tôi sẽ chèn ‘Datacamp’ trong ví dụ sau cho mọi giá trị khuyết.

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) 
# tìm các giá trị khuyết
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

Xử lý cột và chỉ mục

Hãy xem các giá trị khuyết được biểu diễn như thế nào ở cột 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

Nếu bạn muốn ít chữ số thập phân hơn, hãy dùng tham số float_format để chỉ định số chữ số thập phân. Ở đây, chúng ta sẽ dùng ba chữ số.

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

Nếu bạn không muốn thấy chỉ mục, hãy đặt tham số index thành False.

Bạn cũng có thể quyết định có giữ tên cột hay không bằng tham số header và đặt nó thành True hoặc False (hoặc bạn có thể đặt tên cho các cột).

Tham số columns cho phép bạn chọn những cột cần giữ lại. Tham số index_label cho phép bạn đặt tên cho cột chỉ mục hoặc một danh sách tên nếu bạn có nhiều chỉ mục.

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

Mở tệp, mã hóa và nén

Tham số mode cho phép bạn quyết định phải làm gì khi đã có sẵn một tệp CSV trùng tên với tệp bạn đang tạo. Nếu bạn đặt tham số là ‘w’ và đã có tệp new_titanic.csv, tệp bạn tạo sẽ thay thế tệp cũ. Nếu đặt là ‘x’, tệp mới chỉ được tạo nếu chưa tồn tại tệp trùng tên. Cuối cùng, nếu đặt là ‘a’, nội dung mới sẽ được nối thêm vào tệp cũ trùng tên (có thể bạn chỉ muốn thêm một vài hàng).

Tham số encoding thiết lập bảng mã cho tệp mới. Nếu dữ liệu của bạn có chứa ký tự đặc biệt, như chữ cái của các bảng chữ cái khác, bạn có thể đặt là ‘utf-8’ hoặc một bảng mã khác.

Tham số compression thiết lập cách nén cho tệp mới. Mặc định là ‘infer’, nghĩa là nén theo phần mở rộng của tệp, nhưng bạn cũng có thể chỉ định phần mở rộng ưa thích của mình.

# Suy luận kiểu nén
new_df.to_csv('new_titanic.csv.gz')
# Chỉ định kiểu nén một cách tường minh
new_df.to_csv('new_data.csv.gz', compression='gzip')
# Chỉ định kiểu nén qua một dictionary
new_df.to_csv(
    'new_data.zip', 
    compression={
        'method': 'zip', 
        'archive_name': 'data.csv'
    }
)

Cách dùng dấu ngoặc kép

Tham số quoting quy định loại dữ liệu nào sẽ được đặt trong ngoặc kép. Như tôi đã nói, khi bạn dùng dấu phẩy làm phân tách và đồng thời có các ô chứa dấu phẩy (như văn bản), bạn phải quyết định những gì cần đặt trong ngoặc kép.

# Giá trị mặc định, chỉ đặt ngoặc cho các trường có ký tự đặc biệt hoặc dấu phân tách như tab và dấu phẩy
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_MINIMAL)
# Đặt ngoặc cho tất cả các trường
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_ALL)
# Chỉ đặt ngoặc cho các trường có giá trị không phải số
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONNUMERIC)
# Không trường nào được đặt ngoặc
new_df.to_csv('new_titanic.csv', quoting=csv.QUOTE_NONE)

Kích thước khối và dữ liệu ngày-giờ

Tham số chunksize chỉ định mỗi lần sẽ ghi bao nhiêu dữ liệu vào tệp. Nếu để giá trị mặc định, tất cả các hàng sẽ được ghi cùng lúc, nhưng bạn có thể chỉ định một con số, điều này hữu ích khi tệp rất lớn.

Tham số date_format thiết lập cách biểu diễn các đối tượng datetime. Bạn có thể chỉ định bằng định dạng strftime.

# Ghi DataFrame ra CSV với ngày được định dạng 'MM/DD/YYYY'
new_df.to_csv('new_titanic.csv', date_format='%m/%d/%Y')
# Bạn có thể thiết lập đối tượng datetime đến độ chính xác theo giây
new_df.to_csv('new_titanic.csv', date_format='%Y-%m-%d %H:%M:%S')

Kết luận

Hy vọng giờ đây bạn đã sẵn sàng xuất DataFrame của mình theo định dạng phù hợp với nhu cầu!

Tôi khuyến khích bạn tiếp tục học hỏi—dưới đây là một số tài nguyên bạn có thể thử:


Tudor Mărginean's photo
Author
Tudor Mărginean

Tôi sắp hoàn thành chương trình thạc sĩ về khoa học dữ liệu tại Đại học Bucharest, Romania, với luận văn về dự đoán lưu lượng giao thông sử dụng các mô hình dựa trên Mạng Nơ-ron Đồ thị. Những kỹ năng chính tôi đã học được gồm làm sạch và trực quan hóa dữ liệu bằng Python và Power BI, tiền xử lý cho nhiều bài toán học máy, và xây dựng mô hình với PyTorch (hoặc TensorFlow). Đồng thời, với tư cách nghiên cứu sinh tiến sĩ ngành triết học, tôi giảng dạy seminar về logic bậc nhất và thực hiện luận án về lý thuyết xác nhận Bayes. Tôi mong muốn học thêm về dữ liệu và xây dựng mô hình, cũng như chia sẻ những gì mình học được.

Chủ đề
Phân tích dữ liệu
Khoa học Dữ liệu

Học Pandas với các khóa học này!

Khóa học

Xử lý dữ liệu với pandas

4 giờ
566K
Tìm hiểu cách nhập và làm sạch dữ liệu, tính toán thống kê và tạo trực quan hóa với pandas.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm