【Pandas】read_csvでCSVファイルを読み込む方法とよくあるハマりどころ

Pandas

こんにちは、かつコーチです。
pandasを使う多くの場面で最初に書くコードがread_csvです。
シンプルな関数に見えますが、実務で使うと文字化けや型のズレなど、初心者がつまずきやすいポイントがいくつもあります。
この記事では、基本の使い方から実際にハマりやすいポイントまでまとめて解説します。

read_csvとは?

read_csvの定義:CSVファイルをDataFrameに変換する関数

read_csvとは、CSV形式(カンマ区切り)のファイルを読み込んで、pandasのDataFrameに変換する関数です。
pd.read_csv("ファイルパス")と書くだけで、ファイルの中身を表形式のデータとして読み込めます。

なぜread_csvの理解が重要なのか

データ分析の作業は、ほとんどの場合「ファイルを読み込む」ところから始まります。
この最初の一歩でつまずくと、その後の分析コード自体は正しくても、データが正しく読み込めていないせいで結果がおかしくなる、ということが起こります。
読み込み時点で文字化けや型のズレに気づけるようになると、後工程でのトラブルを大きく減らせます。

基本の書き方:read_csvの使い方

手順1:もっとも基本的な読み込み

import pandas as pd

df = pd.read_csv("sales.csv")
print(df.head())  # 先頭5行を表示

df.head()は先頭数行だけを確認できる便利なメソッドで、読み込み直後の確認に必須です。

手順2:文字コードを指定する

日本語を含むCSVファイル、特にExcelで保存したファイルは、文字コードがShift-JIScp932)になっていることが多く、そのまま読み込むと文字化けやエラーが起こります。

df = pd.read_csv("sales.csv", encoding="cp932")

手順3:区切り文字を指定する

カンマ区切りではなくタブ区切り(TSV)のファイルを読み込みたい場合は、sep引数を指定します。

df = pd.read_csv("sales.tsv", sep="\t")

手順4:特定の列だけ読み込む

列数が多いファイルから必要な列だけを読み込みたい場合は、usecolsが便利です。

df = pd.read_csv("sales.csv", usecols=["日付", "商品名", "金額"])

不要な列を読み込まないことで、メモリ使用量を抑えつつ処理速度も改善できます。

つまずきやすい設定・注意点

  • index_colを指定し忘れると、元データにあるID列とは別に、pandasが自動で連番のインデックスを振ります
  • dtypeを指定しないと、数字だけの列でも先頭に0があるコード(郵便番号など)は数値として読み込まれ、0が消えてしまいます
# 郵便番号列が数値化されて先頭の0が消えるのを防ぐ
df = pd.read_csv("customers.csv", dtype={"郵便番号": str})

よくあるつまずきポイント・エラー対処

文字化け・UnicodeDecodeError

❌Before:文字コードを指定せずにそのまま読み込む

df = pd.read_csv("sales.csv")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte

私が初めてクライアントから受け取ったExcel由来のCSVを読み込んだとき、まさにこのエラーに遭遇しました。
UTF-8で読もうとして失敗しているというエラーメッセージから、「文字コードがUTF-8ではないのでは」と推測し、cp932を試したところ無事に読み込めました。

✅After:Windows・Excel由来のファイルはencoding="cp932"を試す

df = pd.read_csv("sales.csv", encoding="cp932")

どちらの文字コードか分からない場合は、utf-8cp932shift_jisの順に試すと大抵は解決します。

数値のはずの列が文字列(object型)になる

❌Before:型を確認せずにそのまま集計処理をしてしまう

df = pd.read_csv("sales.csv")
total = df["金額"].sum()
TypeError: can only concatenate str (not "int") to str

これは、金額の列にカンマ区切り(1,000のような表記)や空白が混ざっていて、pandasが数値ではなく文字列として読み込んでしまうケースでよく起こります。

✅After:読み込み後に型を確認し、必要ならカンマを除去してから数値に変換する

df = pd.read_csv("sales.csv")
print(df.dtypes)  # 金額列がobject型になっていないか確認

df["金額"] = df["金額"].str.replace(",", "").astype(int)

エラーが出たら、まずdf.dtypesで型を確認する。
これを最初の一手にするだけで、原因の切り分けが格段に早くなります。

応用・一歩先の使い方

大きなファイルをチャンク分割で読み込む

数百MB〜数GBのCSVファイルを一度に読み込むとメモリ不足になることがあります。
その場合はchunksizeを指定して、少しずつ分割して処理します。

chunk_list = []
for chunk in pd.read_csv("big_data.csv", chunksize=100000):
    filtered = chunk[chunk["金額"] > 1000]
    chunk_list.append(filtered)

df = pd.concat(chunk_list, ignore_index=True)

URLから直接読み込む

read_csvはローカルファイルだけでなく、URLを指定してオンライン上のCSVを直接読み込むこともできます。

df = pd.read_csv("https://example.com/data.csv")

社内で公開しているデータや、公的機関のオープンデータを扱う際に便利な書き方です。

まとめ

この記事のポイント

  • read_csvはCSVファイルをDataFrameに変換する基本関数
  • 日本語ファイルはencoding="cp932"を試すと文字化けを解消できることが多い
  • 郵便番号などはdtype=strで読み込まないと先頭の0が消える
  • エラーが出たらまずdf.dtypesで型を確認するのが第一歩
  • 巨大なファイルはchunksizeで分割読み込みする

次に読むべき記事

CSVを正しく読み込めるようになったら、次はデータの中から必要な部分だけを取り出す方法を解説した「loc・ilocでデータを選択・抽出する」に進みましょう。

タグ: Pandas, 初心者向け, 基本操作

タイトルとURLをコピーしました