pandas
提供了多種方法來讀取和寫入各種格式的文件。
本文主要介紹讀取寫入CSV 文件與Excel 文件,與比較兩者的差異。
為什麼要介紹這兩種呢,因為大多的練習範例的數據都是用csv檔儲存,像Kaggle競賽,比賽提供的數據也大多都是csv檔。Kaggle是一個數據建模和數據分析競賽平台,它的數據大多都是csv檔,有點像機器學習的 Leetcode,不過除了可以練習以外,Kaggle 比賽的好成績寫在履歷上是廣泛被認可的,Kaggle 打一個好成績。這個成績就可以當作往機器學習或資料科學工作的敲門磚。
CSV 文件
1. 讀取 CSV 文件
pandas
提供了 pd.read_csv()
方法來讀取 CSV 文件。你可以使用多種參數來控制讀取過程。
import pandas as pd
# 基本的讀取方法
df = pd.read_csv('data.csv')
print(df.head()) # 顯示前五行數據
# 指定分隔符(如果不是默認的逗號)
df = pd.read_csv('data.tsv', sep='\t')
# 處理沒有標題的 CSV 文件
df = pd.read_csv('data.csv', header=None)
# 指定特定的行作為列名
df = pd.read_csv('data.csv', header=1)
# 只讀取特定的列
df = pd.read_csv('data.csv', usecols=['Name', 'Age'])
# 處理缺失值
df = pd.read_csv('data.csv', na_values=['N/A', 'NA', 'NULL'])
# 指定編碼(例如處理 UTF-8 編碼的文件)
df = pd.read_csv('data.csv', encoding='utf-8')
程式範例
讀取下面章節程式範例寫入的csv文件。
df = pd.read_csv('output.csv')
print(df)
# 輸出
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
2. 寫入 CSV 文件
pandas
使用 DataFrame.to_csv()
方法將 DataFrame
寫入 CSV 文件。
# 基本的寫入方法
df.to_csv('output.csv', index=False)
# 指定分隔符
df.to_csv('output.tsv', sep='\t', index=False)
# 不寫入列名
df.to_csv('output.csv', index=False, header=False)
# 處理缺失值
df.to_csv('output.csv', na_rep='NULL', index=False)
# 指定編碼
df.to_csv('output.csv', encoding='utf-8', index=False)
範例
import pandas as pd
# 創建一個 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# 將 DataFrame 寫入 CSV 文件
df.to_csv('output.csv', index=False)
若無此CSV檔則會自己創建,產生了含有data資料的csv文件。

Excel 文件
1. 讀取 Excel 文件
使用 pandas
的 pd.read_excel()
方法來讀取 Excel 文件。可以指定讀取的工作表名稱或索引,以及其他參數來控制讀取過程。
import pandas as pd
# 讀取 Excel 文件中的第一個工作表
df = pd.read_excel('data.xlsx')
print(df.head()) # 顯示前五行數據
# 指定讀取特定的工作表
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 讀取多個工作表到一個字典中
dfs = pd.read_excel('data.xlsx', sheet_name=['Sheet1', 'Sheet2'])
# 讀取所有工作表
dfs = pd.read_excel('data.xlsx', sheet_name=None)
# 只讀取特定的列
df = pd.read_excel('data.xlsx', usecols=['Name', 'Age'])
# 處理缺失值
df = pd.read_excel('data.xlsx', na_values=['N/A', 'NA', 'NULL'])
2. 寫入 Excel 文件
使用 DataFrame.to_excel()
方法將 DataFrame
寫入 Excel 文件。你可以寫入單個或多個工作表,並進行格式化。
# 基本的寫入方法
df.to_excel('output.xlsx', index=False)
# 指定寫入特定的工作表
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
# 寫入多個工作表
with pd.ExcelWriter('output.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)
# 自定義起始行和列
df.to_excel('output.xlsx', startrow=2, startcol=3, index=False)
# 處理缺失值
df.to_excel('output.xlsx', na_rep='NULL', index=False)
# 新增格式(例如標題行格式化)
with pd.ExcelWriter('output.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# 定義格式
header_format = workbook.add_format({'bold': True, 'text_wrap': True, 'valign': 'top', 'fg_color': '#D7E4BC', 'border': 1})
# 寫入標題
for col_num, value in enumerate(df.columns.values):
worksheet.write(0, col_num, value, header_format)
程式範例
import pandas as pd
# 創建一個 DataFrame
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
# 使用 ExcelWriter 寫入
with pd.ExcelWriter('output.xlsx', engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
df.to_excel(writer, sheet_name='Sheet1', index=False)
ExcelWriter詳細說明:
- engine='openpyxl': 使用
openpyxl
引擎來讀取和寫入 Excel 文件,這是因為openpyxl
支持在現有文件中進行追加操作。 - mode='a': 以追加模式打開 Excel 文件。如果文件不存在,則創建一個新文件。
- if_sheet_exists='replace': 如果工作表已經存在,這會用新的數據替換掉舊的工作表。如果希望保留原有工作表而不覆蓋,可以選擇
if_sheet_exists='new'
(添加新的工作表,如果名稱已存在則拋出錯誤)。

CSV 和 Excel 的比較
1. CSV 的優點與缺點
- 優點:
- 輕量級,適合處理純文本數據。
- 通用性強,幾乎所有數據分析工具都支持。
- 適合大數據集的快速讀寫。
- 缺點:
- 不支持多工作表。
- 不支持數據格式和樣式。
- 僅適用於簡單的數據結構,無法保存複雜數據。
2. Excel 的優點與缺點
- 優點:
- 支持多工作表。
- 支持數據格式、樣式、公式等豐富的表格功能。
- 更適合需要表格呈現的數據。
- 缺點:
- 文件較大,讀寫速度相對較慢。
- 格式過於複雜時,可能出現兼容性問題。
總結
- CSV 文件適合處理純文本數據和大數據集,而 Excel 文件適合需要多工作表和豐富格式的場景。
pandas
提供了靈活的方法來讀取和寫入這兩種文件格式,並允許你自定義讀寫過程中的各種細節。