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()
輸出格式比較
| 格式 | 方法 | 適用情境 |
|---|---|---|
| CSV | to_csv() | 通用交換格式,大多數工具都支援 |
| Excel | to_excel() | 給非技術人員使用,需要保留格式 |
| JSON | to_json() | Web API、程式間資料交換 |
| SQL | to_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)