Pandas 寫入資料

處理完資料後,你可以將 DataFrame 輸出成各種格式的檔案。

寫入 CSV 檔案

使用 to_csv() 將 DataFrame 寫入 CSV 檔案:

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35]
})

df.to_csv('output.csv')

常用參數

# 不輸出索引(最常用)
df.to_csv('output.csv', index=False)

# 指定編碼
df.to_csv('output.csv', encoding='utf-8-sig')  # Excel 可正確顯示中文

# 指定分隔符號
df.to_csv('output.csv', sep='\t')  # Tab 分隔

# 只輸出特定欄位
df.to_csv('output.csv', columns=['name'])

# 處理缺失值
df.to_csv('output.csv', na_rep='NA')

寫入 Excel 檔案

使用 to_excel() 寫入 Excel 檔案:

df.to_excel('output.xlsx', index=False)

寫入多個工作表

# 使用 ExcelWriter 寫入多個工作表
with pd.ExcelWriter('output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

指定起始位置

df.to_excel('output.xlsx', index=False, startrow=2, startcol=1)

寫入 JSON 檔案

使用 to_json() 寫入 JSON 檔案:

df.to_json('output.json')

不同 JSON 格式

# 預設格式(columns)
# {"name":{"0":"Alice","1":"Bob"},"age":{"0":25,"1":30}}
df.to_json('output.json', orient='columns')

# records 格式(陣列,最常用)
# [{"name":"Alice","age":25},{"name":"Bob","age":30}]
df.to_json('output.json', orient='records')

# 加上縮排,方便閱讀
df.to_json('output.json', orient='records', indent=2)

# 處理中文,避免 Unicode 編碼
df.to_json('output.json', force_ascii=False)

寫入 SQL 資料庫

使用 to_sql() 寫入資料庫:

import sqlite3

conn = sqlite3.connect('database.db')

# if_exists: 'fail'(預設)、'replace'、'append'
df.to_sql('users', conn, if_exists='replace', index=False)

conn.close()

複製到剪貼簿

可以將 DataFrame 複製到剪貼簿,方便貼到 Excel:

df.to_clipboard(index=False)

轉換成其他格式

轉成 dict

# 預設格式
df.to_dict()
# {'name': {0: 'Alice', 1: 'Bob'}, 'age': {0: 25, 1: 30}}

# records 格式
df.to_dict('records')
# [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]

# list 格式
df.to_dict('list')
# {'name': ['Alice', 'Bob'], 'age': [25, 30]}

轉成 NumPy array

arr = df.to_numpy()
# 或
arr = df.values

轉成 HTML

html = df.to_html()

轉成 Markdown

md = df.to_markdown()

輸出格式比較

格式方法適用情境
CSVto_csv()通用交換格式,大多數工具都支援
Excelto_excel()給非技術人員使用,需要保留格式
JSONto_json()Web API、程式間資料交換
SQLto_sql()儲存到資料庫

大型檔案輸出

對於大型 DataFrame,可以分批寫入:

# 分批寫入 CSV
chunk_size = 10000
for i in range(0, len(df), chunk_size):
    chunk = df.iloc[i:i + chunk_size]
    mode = 'w' if i == 0 else 'a'
    header = i == 0
    chunk.to_csv('output.csv', mode=mode, header=header, index=False)