Pythonを使ってCSVファイルからデータを読み込み、集計や分析を行いたいと考えた時、その最も強力で効率的な選択肢となるのが「Pandasライブラリ」です。
Pythonには標準でcsv
モジュールも用意されていますが、データ分析や機械学習といった分野では、Pandasを使うのが現在のデファクトスタンダードとなっています。
その理由は、Pandasが提供する「DataFrame」という高機能なデータ構造にあります。
この記事では、なぜPandasがCSV読み込みに最適なのかという基本から、pd.read_csv()
関数の基本的な使い方、そして実務で必ず役立つ応用的なオプションまで、豊富なサンプルコードと共に徹底的に解説していきます。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
受講生から評判の良いプログラミングスクール
スクール |
特徴 |
受講料金 |
大手比較サイトで4年連続人気NO.1!受講生からの評判も非常に高く、Web系のエンジニアを目指すならRUNTEQ一択。 | 550,000円(給付金適用あり) | |
月単価80万円以上の現役エンジニア講師による指導!一度入会すればサポートは半永久的。 | 498,000円 | |
格安で質の高いWeb制作スキルを習得したい人におすすめ!業界最安級の料金でありながら、コミュニティやサポートが充実。 | 129,800円~ | |
完全無料でプログラミングが学べる貴重なスクール!最短1ヶ月で卒業可能。ゼロスク運営会社への就職もできる。 | 無料 | |
長期間に渡って学習し、希少人材を目指す人に最適なスクール!受講料は高いものの、高収入を得られる人材を目指せる。 | 96~132万円 |
Pandasとは?なぜCSV読み込みに使うのか?
Pandasは、Pythonでデータ分析を行うための高速で柔軟、かつ表現力豊かなデータ構造を提供するオープンソースライブラリです。
その中心的な役割を担うのがDataFrameオブジェクトです。
DataFrameとは、Excelのスプレッドシートやデータベースのテーブルのように、行と列から成る二次元の表形式データを扱うためのデータ構造です。
Pandasを使うと、CSVファイルをわずか1行のコードでこのDataFrameに直接読み込むことができます。
DataFrameに読み込んでしまえば、特定の列の抽出、条件による絞り込み、集計、グラフ化といった、データ分析に必要なあらゆる操作を簡単かつ高速に行うことが可能になります。
これが、多くのデータサイエンティストやエンジニアがCSV操作にPandasを選ぶ理由です。
Pandas read_csvの基本的な使い方
それでは、実際にPandasを使ってCSVファイルを読み込んでみましょう。
Pandasのインストール
まず、Pandasがインストールされていない場合は、ターミナル(コマンドプロンプト)で以下のコマンドを実行してインストールします。
pip install pandas
CSVファイルの準備
今回は、以下のような内容のsample.csv
というファイルが、Pythonスクリプトと同じディレクトリにあることを想定して進めます。
ID,Name,Age,City
1,Sato,32,Tokyo
2,Suzuki,45,Osaka
3,Takahashi,28,Nagoya
最もシンプルな読み込み
Pandasをインポートし、pd.read_csv()
関数にファイル名を渡すだけで、CSVファイルをDataFrameとして読み込むことができます。
サンプルコード
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('sample.csv')
# 読み込んだ内容(DataFrame)を表示
print(df)
実行結果
ID Name Age City
0 1 Sato 32 Tokyo
1 2 Suzuki 45 Osaka
2 3 Takahashi 28 Nagoya
ソースコードの解説
import pandas as pd
でPandasライブラリをインポートし、慣例としてpd
という別名を付けています。pd.read_csv('sample.csv')
でCSVファイルを読み込み、その結果をdf
という変数に格納します。print(df)
でDataFrameの中身を確認すると、CSVの1行目が自動的にヘッダー(列名)として認識され、データがきれいな表形式で取り込まれていることが分かります。
【目的別】read_csvの便利な引数(オプション)
read_csv
は非常に多機能で、様々な形式のCSVファイルに対応するための引数(オプション)が用意されています。
ここでは、実務で特によく使うものを厳選して紹介します。
ヘッダー(列名)の操作
CSVファイルによっては、ヘッダー行がなかったり、先頭に不要な情報が含まれていたりすることがあります。
header=None
: ヘッダー行がないCSVファイル用
# header=None を指定すると、列名が自動で0から始まる連番になる
df_no_header = pd.read_csv('no_header.csv', header=None)
print(df_no_header)
names=['列名1', ...]
: 自分で列名を指定
# header=None と names を組み合わせるのが一般的
df_with_names = pd.read_csv('no_header.csv', header=None, names=['ID', '名前', '年齢', '都市'])
print(df_with_names)
skiprows=数値
: 先頭から指定した行数を読み飛ばす
# 先頭の2行をスキップして読み込む
df_skipped = pd.read_csv('with_title.csv', skiprows=2)
print(df_skipped)
インデックス列の指定
デフォルトでは、インデックス(行ラベル)は0, 1, 2, ...
と自動で振られますが、CSVファイル内の特定の列をインデックスとして使いたい場合があります。
index_col=列番号または列名
: 指定した列をインデックスにする
# 'ID'列をインデックスとして読み込む
df_indexed = pd.read_csv('sample.csv', index_col='ID')
print(df_indexed)
実行結果
Name Age City
ID
1 Sato 32 Tokyo
2 Suzuki 45 Osaka
3 Takahashi 28 Nagoya
左端のインデックスが、ID列の値に変わっていることが確認できます。
文字コードの指定(文字化け対策)
WindowsのExcelで作成・保存されたCSVファイルは、文字コードがShift_JIS
(またはcp932
)になっていることが多く、そのまま読み込むと日本語が文字化けすることがあります。
encoding='文字コード名'
: 文字コードを指定して文字化けを防ぐ
# Shift_JISでエンコードされたCSVファイルを読み込む
try:
df = pd.read_csv('sample_sjis.csv')
except UnicodeDecodeError as e:
print(f"エラー: {e}")
# encodingを指定して正しく読み込む
df_sjis = pd.read_csv('sample_sjis.csv', encoding='shift_jis')
print(df_sjis)
文字化けが起きたら、まずはencoding='shift_jis'
やencoding='cp932'
を試してみるのが定石です。
データ型の指定
read_csv
は自動でデータ型を推測しますが、意図しない型に解釈されることがあります(例: 001
のようなIDが数値の1
になってしまう)。
これを防ぐには、dtype
引数で型を明示的に指定します。
dtype={'列名': 型}
: 列ごとにデータ型を指定
# 'ID'列を文字列(object)として読み込む
df_dtype = pd.read_csv('zero_padded_id.csv', dtype={'ID': 'object'})
print(df_dtype)
print(df_dtype.info()) # .info()で各列のデータ型を確認できる
CSV読み込みでよくあるエラーと対処法
FileNotFoundError
: 「ファイルが見つかりません」というエラーです。- ファイル名やパスのスペルは正しいか?
- 実行しているPythonスクリプトとCSVファイルは同じディレクトリにあるか?(違う場合は、
'data/sample.csv'
のような相対パスや、絶対パスで指定する必要があります)
UnicodeDecodeError
: 文字化けが原因で発生するエラーです。encoding
引数に'shift_jis'
,'cp932'
,'utf-8'
などを指定して、正しい文字コードを探しましょう。
ParserError
: CSVファイルの形式自体に問題がある場合に発生します。- 各行のカンマの数が異なっていないか?
- データの中に予期せぬ改行が含まれていないか? CSVファイルをテキストエディタで開いて、構造が崩れていないか確認してみてください。
まとめ
以上、PythonのPandasライブラリを使ってCSVファイルを読み込む方法について、基本から応用までを詳しく解説しました。
なお、Pythonを体系的に学んだり、Pythonのスキルを高めたりするためには、プログラミングスクールを利用するのも有効です。
細かな疑問がすぐに解決するだけでなく、現役エンジニアが「質の高いポートフォリオ」を作成するための手助けをしてくれたり、エンジニア就職・転職のコツを教えてくれたりするなど、様々なメリットがありますので、独学に疲れた方は検討してみてはいかがでしょうか。