Skip to content

Pandas read_csv() チュートリアル:CSV をプロのようにインポートする方法

Updated on

pandas.read_csv() 関数は、データ分析で最もよく使われるツールの 1 つです。小さなデータセットでも数 GB 規模のファイルでも、read_csv() の仕組みと最適化方法を理解しておくことで、時間・メモリ・デバッグの手間を大きく節約できます。

この 2025 年版のアップデートガイドでは、Pandas 2.0PyArrow エンジン、エンコーディングの扱い、日付のパース、よくあるエラーの修正などを含め、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() の引数(クイックリファレンス)

ParameterDescription
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

次を検討:

  • chunksize
  • usecols
  • 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 の他のチュートリアル