Pandas read_csv() チュートリアル:CSV をプロのようにインポートする方法
Updated on
pandas.read_csv() 関数は、データ分析で最もよく使われるツールの 1 つです。小さなデータセットでも数 GB 規模のファイルでも、read_csv() の仕組みと最適化方法を理解しておくことで、時間・メモリ・デバッグの手間を大きく節約できます。
この 2025 年版のアップデートガイドでは、Pandas 2.0、PyArrow エンジン、エンコーディングの扱い、日付のパース、よくあるエラーの修正などを含め、CSV ファイルを クリーンに・高速に・正しく 読み込むために知っておくべきポイントを網羅します。
⚡ DataFrame から即座にチャートを作りたいですか?
PyGWalker は、Pandas / Polars の DataFrame を Jupyter Notebook 内で直接操作できるインタラクティブなビジュアル UI に変換します。
列をドラッグ & ドロップ → チャートを自動生成 → データをビジュアルに探索できます。
たった 1 行で試せます:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)| Run in Kaggle (opens in a new tab) | Run in Google Colab (opens in a new tab) | ⭐️ Star PyGWalker (opens in a new tab) |
|---|
pandas.read_csv() とは?
read_csv() は、CSV ファイルを pandas の中核データ構造である DataFrame に読み込むための代表的なメソッドです。次のような機能をサポートしています:
- 区切り文字(デリミタ)のカスタマイズ
- 欠損値の扱い
- 型推論や手動でのデータ型指定
- 日付のパース
- 大規模ファイルのストリーミング読み込み
- 複数のパーサーエンジン(Python, C, PyArrow)
- 読み込み時のインデックス設定
- 効率的な列の選択
Pandas 2.0 では、より高速でメモリ効率の高いバックエンドとして PyArrow が導入され、CSV 読み込みの性能がさらに向上しました。
基本的な使い方
import pandas as pd
df = pd.read_csv("your_file.csv")
df.head()これだけで動きますが、実際のプロジェクトで扱う CSV はそう単純ではありません。次に、よく使う引数を見ていきます。
よく使う read_csv() の引数(クイックリファレンス)
| Parameter | Description |
|---|---|
sep | 列の区切り文字(デフォルトは ,) |
usecols | 読み込む列を選択 |
index_col | 特定の列をインデックスとして設定 |
dtype | データ型を明示的に指定 |
parse_dates | 日付列を自動的に datetime としてパース |
na_values | 欠損値として扱う文字列をカスタマイズ |
on_bad_lines | 不正な行(壊れた行)に対してスキップや警告を指定 |
engine | パーサーの種類 "python", "c", "pyarrow" |
chunksize | 大きなファイルをチャンクに分けてストリーミング読み込み |
encoding | 文字コードの指定(utf-8, latin-1 など) |
1. 列をインデックスとして設定する
方法 A — 読み込み後に設定:
df = df.set_index("id")方法 B — 読み込み時に設定:
df = pd.read_csv("file.csv", index_col="id")2. 特定の列だけ読み込む
読み込み時間とメモリ使用量を削減できます:
df = pd.read_csv("file.csv", usecols=["name", "age", "score"])3. 欠損値を扱う
df = pd.read_csv("file.csv", na_values=["NA", "-", ""])4. 日付を自動的にパースする
df = pd.read_csv("sales.csv", parse_dates=["date"])Pandas が適切な datetime フォーマットを推論して変換してくれます。
5. エンコーディングエラーを修正する(よくある問題)
df = pd.read_csv("file.csv", encoding="utf-8", errors="ignore")UTF-8 でエラーになる場合:
df = pd.read_csv("file.csv", encoding="latin-1")6. PyArrow エンジンを使う(Pandas 2.0+)
より高速なパースとメモリ効率の向上のために:
df = pd.read_csv("file.csv", engine="pyarrow")新しい Arrow バックエンドの dtype と組み合わせる:
df = pd.read_csv(
"file.csv",
engine="pyarrow",
dtype_backend="pyarrow"
)7. 大きな CSV(1GB〜100GB)を読み込む
チャンク読み込みを利用:
reader = pd.read_csv("big.csv", chunksize=100_000)
for chunk in reader:
process(chunk)または、必要な列と型だけを読み込む:
df = pd.read_csv(
"big.csv",
usecols=["user_id", "timestamp"],
dtype={"user_id": "int32"},
)8. よくあるエラーとその対処法
❌ UnicodeDecodeError
次のように指定:
encoding="latin-1"❌ ParserError: Error tokenizing data
ファイル内に壊れた行が含まれている場合:
pd.read_csv("file.csv", on_bad_lines="skip")❌ 大きなファイルで MemoryError
次を検討:
chunksizeusecols- Arrow バックエンド(
dtype_backend="pyarrow")
❌ 区切り文字が違う
pd.read_csv("file.csv", sep=";")実践例:きれいなインポート設定
df = pd.read_csv(
"sales.csv",
sep=",",
parse_dates=["date"],
dtype={"amount": "float64"},
na_values=["NA", ""],
engine="pyarrow"
)CSV を使うべき場面と避けるべき場面
CSV が適しているのは:
- 移植性が重要なとき
- シンプルなパイプライン
- 小〜中規模のデータセット
一方、CSV を避けるべきなのは次のようなケースです:
- 高速性が重要
- 圧縮を活用したい
- スキーマの一貫性が必要
- 複雑な型(ネスト構造など)を扱う
大規模な分析用途では Parquet を優先するとよいでしょう。
FAQs
区切り文字を自動検出するには?
pd.read_csv("file.csv", sep=None, engine="python")先頭のヘッダー行をスキップするには?
pd.read_csv("file.csv", skiprows=3)zip 圧縮された CSV を読み込むには?
pd.read_csv("file.csv.zip")まとめ
pandas.read_csv() は、単純な CSV ファイルから数 GB 規模のデータセットまで、ほぼあらゆる CSV インポートのシナリオに対応できる強力で柔軟なツールです。
主要な引数の意味を理解し、Pandas 2.0+ で PyArrow を活用しつつ、列選択・日付パース・エラー処理といったベストプラクティスを取り入れることで、データの読み込みワークフローを大きく改善できます。
Pandas の他のチュートリアル