こんにちは、かつコーチです。
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-JIS(cp932)になっていることが多く、そのまま読み込むと文字化けやエラーが起こります。
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-8→cp932→shift_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, 初心者向け, 基本操作