CSVファイルとExcelファイルの取り扱い
このトピックを終えると
pandasを使ってCSVファイルとExcelファイルを読み書きできるようになり、実務で頻繁に遭遇するエンコーディング、シート選択、列指定の問題を解決できるようになります。
CSVとは
CSV(Comma-Separated Values)は、カンマで区切られたテキストファイルです。メモ帳で開くと、次のようになります。
名前,年齢,都市
キム・フン,30,ソウル
イ・ス,25,釜山
パク・ジン,35,大田最も一般的なデータ交換形式です。どのようなプログラミング言語、どのようなオペレーティングシステムでも読み込むことができます。Excel、Google Sheets、データベースなど、すべてCSVのエクスポートをサポートしています。
CSVファイルの読み込み
import pandas as pd
# 基本的な読み込みdf = pd.read_csv("data.csv")
# エンコーディングの指定 - 韓国語の文字化けを防ぐdf = pd.read_csv("data.csv", encoding="cp949")# Windows Excelで保存された韓国語CSVファイルは、cp949(またはeuc-kr)
# UTF-8 BOMdf = pd.read_csv("data.csv", encoding="utf-8-sig")韓国語のCSVファイルを読み込む際にUnicodeDecodeErrorが発生する場合は、エンコーディングの問題です。順番に試します:utf-8 → utf-8-sig → cp949 → euc-kr。
CSVファイルの読み込み - 高度なオプション
# 特定の列のみを読み込む - メモリの節約df = pd.read_csv("data.csv", usecols=["名前", "年齢"])
# 区切り文字がカンマではない場合df = pd.read_csv("data.tsv", sep="\t") # タブ区切りdf = pd.read_csv("data.txt", sep="|") # パイプ区切り
# ヘッダーがないファイルdf = pd.read_csv("data.csv", header=None, names=["col1", "col2", "col3"])
# スキップする行を指定df = pd.read_csv("data.csv", skiprows=2) # 上位2行をスキップ
# 大きなファイル - チャンク単位で読み込むfor chunk in pd.read_csv("big.csv", chunksize=10000): process(chunk) # 10,000行ずつ処理chunksizeは、数百MBを超える大規模なファイルでメモリ不足を防ぎます。一度にすべてをメモリにロードするのではなく、チャンクごとに処理します。
Excelファイルの読み込み
# 基本的な読み込み(最初のシート)df = pd.read_excel("report.xlsx")
# 特定のシートdf = pd.read_excel("report.xlsx", sheet_name="売上")
# 複数のシートを一度にsheets = pd.read_excel("report.xlsx", sheet_name=None)# {'Sheet1': DataFrame, '売上': DataFrame, '費用': DataFrame}
for name, data in sheets.items(): print(f"{name}: {len(data)}行")
# セルの範囲を指定df = pd.read_excel("report.xlsx", usecols="B:E", # B~E列のみ skiprows=3, # 上位3行をスキップ nrows=100) # 100行のみExcelファイルの読み込みには、openpyxlパッケージが必要です(pip install openpyxl)。
ファイルの保存
# CSVファイルとして保存df.to_csv("output.csv", index=False, encoding="utf-8-sig")# index=False: 行番号列を除外# utf-8-sig: Excelで開いても韓国語が文字化けしない
# Excelファイルとして保存df.to_excel("output.xlsx", index=False, sheet_name="結果")
# 複数のシートに保存with pd.ExcelWriter("output.xlsx") as writer: df_sales.to_excel(writer, sheet_name="売上", index=False) df_cost.to_excel(writer, sheet_name="費用", index=False)CSVファイルを保存する際に、encoding="utf-8-sig"を使用すると、Windows Excelで開いたときに韓国語が文字化けしなくなります。utf-8で保存すると、Excelで文字化けすることがあります。
実践ワークフロー - CSVファイルの結合
複数の月次のCSVファイルを1つに結合することは、非常に一般的な作業です。
import glob
# フォルダ内のすべてのCSVファイルを検索files = glob.glob("monthly_data/*.csv")print(f"{len(files)}個のファイルが見つかりました")
# 読み込んで結合dfs = []for f in sorted(files): temp = pd.read_csv(f, encoding="utf-8-sig") temp["source_file"] = f # 元のファイル名を記録 dfs.append(temp)
df_all = pd.concat(dfs, ignore_index=True)print(f"合計{len(df_all)}行")
# 結果を保存df_all.to_csv("merged_all.csv", index=False, encoding="utf-8-sig")ignore_index=Trueを指定しないと、各ファイルのインデックスがそのまま保持され、0, 1, 2, ..., 0, 1, 2, ... のようになります。
重要なまとめ
CSVファイルとExcelファイルは、データ分析の入口と出口です。外部からデータを受け取る場合、CSV/Excelファイルであり、結果を送信する場合もCSV/Excelファイルであることがほとんどです。エンコーディング(utf-8-sig対cp949)、シートの選択、列の指定 - この3つを確実に理解すれば、「ファイルが開けません」という問題の90%を解決できます。