注目キーワード

【Python】pandas でCSVファイルを読み込むTips (read_csv)

Pythonを用いたデータ解析に便利なライブラリであるpandasを用いて、CSVファイルを読み込む方法とTipsについて説明します。

インストール

pandasがインストールされていない場合には pip install pandas を実行してインストールしてください。サンプルソースのように import pandas as pd がエラー無く実行できていれば大丈夫です。

サンプルデータの準備

こちらの記事ではサンプルのデータとして、厚生労働省のページから新型コロナウイルスに関するオープンデータを用いています。リンク先のページより「PCR検査実施人数」をクリックして「pcr_tested_daily.csv」をダウンロードします。

read_csv を用いてファイルを読み込む

一番簡単な動作例として、以下のプログラムを用意しました。プログラムファイルとダウンロードしてきたCSVファイルが同じ場所に置いてあります。ファイルの場所を指定するには、プログラム中の”./pcr_tested_daily.csv”の箇所を調整してください。

read_csvでファイルを読み込むサンプルソース

サンプルソースです。

1行目ではpandasをインポートし、pdという短い名前で使えるようにしています。

2行目ではダウンロードしてきたpcr_tested_daily.csvファイルをread_csv関数を使って読み込み、dfという名前の変数に格納しています。読み込まれるデータはpandasのDataFrame型となります。

3行目では読み込んだデータの先頭から5行を出力しています。

実際のCSVファイルとPythonを実行して出力したデータを確認してみましょう。以下の画像を確認すると、CSVファイルが読み込まれていることが分かると思います。

こちらはCSVファイルをエディタで開いた図です。

実行結果

こちらはpythonで読み込んで中身を確認した図です。

read_csv で読み込んだデータ(データフレーム)の内容を大まかに確認する

読み込んだデータのざっとした概要を確認するためには、describe() を使います。数値のカウントや平均・標準偏差・最小値・最大値などの要約量を一覧で確認することができます。実際に使ってみた例を次に示します。

データの内容を大まかに確認するサンプルソース

1行目と3行目はデータの読み込みと同じです。

2行目は端末にprintするときのフォーマットを設定しています。

4行目でデータフレームの全体的な情報を出力します。結果は次のようになります。ファイルを読み込んだ後は、一度データの中身をざっと確認してみると役に立つと思います。

実行結果

read_csv を使うときの文字コードと対処法

CSVファイルを読み込むとき、文字コードや文字の種類によっては読み込みに失敗することがあります。例えばExcelから出力したCSVが日本語を含む場合には、文字コードがShift-JISに設定され、pandadsが日本語を読み込むときにエラーを出力することがあります。

この場合には、read_csvのencoding引数を渡していろいろ試してみましょう。encodingとして”Shift-JIS”や”euc-jp”を設定して読み込みを実行すると、エラーにならない可能性があります。

スポンサーリンク

文字コード関係のエラーで読み込めない場合には、CSVファイルをエディタで開いたときの文字コード表示を確認してみると良いでしょう。以下の図はVS Codeを用いてダウンロードしてきたCSVファイルを開いた際の右下の文字コード表示になります。文字コード以外のエラーの場合にも、データの中身をよく確認してみると助けになることがあります。

read_csv で必要な列だけを読み込む

read_csvには様々なオプションがあります。

上記のencoding引数もその一つです。よく使う代表的なものとして、必要な列だけを読み込む方法があります。今回ダウンロードした例では「日付」と「PCR 検査実施人数(単日)」の列がありますので、検査実施人数だけを読み込みしてみます。検査実施人数は1列目のデータになるため、1列目だけを読み込むように指定したものが以下のプログラムです。

列を指定して読み込むサンプルソース

検査人数だけを読み込むことができました。

ここで新しく df.mean() という関数を使って平均値を計算しています。このデータの場合には1日あたりの平均検査実施人数を計算できます。

実行結果

実行すると平均は 74558.216418 人であることが分かりました。これは先程describe() で確認した数値と一致しています。