外部ライブラリ「Pandas」を使って、CSVファイルを読み込みます。
読み込むCSVは、オープンデータにしました。
気象庁の過去の気象データです。
出典:気象庁|「最新の気象データ」CSVダウンロード データ部掲載内容(1、3、6、12、24、48、72時間降水量)
最新のCSVファイル
ローカルのDドライブなどにダウンロードして読み込む方法や、URLを指定して直接読み込む方法を紹介します。
目次(リンク)
Pandasのインストール
表データを扱う外部ライブラリ「Pandas」。
インストールがまだの場合は、ここで入れておきましょう。
Windowsの場合、次のコマンドで行います。
1 |
pip install pandas |
Macの場合は、pipの部分がpip3になります。
初めてライブラリをインストールするという方は、もしかするとエラーに悩まされるかもしれません。
こちらの記事で解決方法を解説していますので、参考にしてみてください。
ローカル環境のCSVファイルを読み込む
まずはローカル環境のCSVファイルを読み込みます。
ここでは、Pythonのソースファイルと同じ階層に「data」フォルダを作成し、その中に格納したCSVファイルを読み込んでいます。
文字コードがUTF-8の場合、そのまま読み込める
冒頭で書いた気象庁の気象データのCSVファイルです。
UTF-8で保存しました。
次のソースコードで実行してみます。
解説は後述します。
1 2 3 4 5 6 |
import pandas as pd #CSVファイル読み込み df = pd.read_csv("data/pre1h00_rct.csv") print(df) |
文字コードを指定しなくても、そのまま読み込めました。
使用するライブラリを、最初にインポートします。
1 |
import pandas as pd |
as pd のように書けば、ライブラリを使うときpdと短く表記できます。
as pd を書かない場合、読み込むところはこんな感じ。
1 |
df = pandas.read_csv("data/pre1h00_rct.csv") |
ちょっと長くなりますね。
ライブラリのread_csvを使って、dataフォルダ内のCSVファイルを読み込んでいます。
そして、読み込んだデータを、データフレームのdfに格納しています。
最後に、
1 |
print(df) |
でdfを表示させます。
SJISなどの場合、SHIFT-JISを指定して読み込む
UTF-8で保存していたCSVファイルをコピペして、SJISで保存しなおしました。
UTF-8のときと同じように読み込もうとすると、次のようにエラーが表示されてしまいます。
どうやらSHIFT-JISを指定しないといけないようです。
「えっ、SJISで保存したんじゃないの?」と思われるかもしれません。
そうなんです。
SJISとSHIFT-JISが同じものだと思っていた頃が私にもありました・・・。
同じならエラーにならないんですけんどね。
というわけで、SHIFT-JISを指定した場合のソースがこちら。
1 2 3 4 5 6 |
import pandas as pd #CSVファイル読み込み df = pd.read_csv("data/pre1h00_rct_sjis.csv",encoding="SHIFT-JIS") print(df) |
保存して実行してみます。
ちゃんと読み込めました。
一部の行を指定して読み込む
こんどはスクレイピングしていきます。
行指定の例です。
1つずつ解説していきますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd #CSVファイル読み込み df = pd.read_csv("data/pre1h00_rct.csv") #3,4,5行目を表示 print(df.loc[[3,4,5]]) #都道府県の列が東京都の行を表示 data_tokyo = df[df["都道府県"]=="東京都"] print("東京都です\n", data_tokyo) #都道府県の列に北海道を含む行を表示 data_hokkaido = df[df["都道府県"].str.contains("北海道")] print("北海道です\n", data_hokkaido) |
行数を指定する
まずは行数を指定する場合
1 |
print(df.loc[[3,4,5]]) |
df.locのところで、dfの3,4,5行目を指定しています。
実行したところ、3行分表示されました。
条件に一致する行を指定する
次は、都道府県の列が”東京都”と一致する行のみを指定します。
1 |
data_tokyo = df[df["都道府県"]=="東京都"] |
dfの都道府県が東京都の行だけ、いったんdata_tokyoに格納しました。
1 |
print("東京都です\n", data_tokyo) |
いったんデータフレームdata_tokyoに格納したデータを、ここで表示しています。
実行したところ、東京都の行が表示されました。
文字列を含む行を指定する
次はあいまい検索です。
都道府県の列に北海道が含まれる行を表示させていきます。
「都道府県」という項目なのに、北海道 ○○地方という表現なんですよね。
1 |
data_hokkaido = df[df["都道府県"]=="北海道"] |
と書いても、悲しいことに0件です。
北海道を含むなら、containsを使って次のように書きます。
1 |
data_hokkaido = df[df["都道府県"].str.contains("北海道")] |
さっそく実行し、北海道 宗谷地方、北海道 檜山地方などが表示されました。
インターネット上のCSVファイルを読み込む
最後に、URLを指定して直接読み込んでいきます。
まず、ソースコードはこちら。
のちほど解説しますね
1 2 3 4 5 6 7 8 |
import pandas as pd #CSVファイル読み込み URL = "http://www.data.jma.go.jp/obd/stats/data/mdrr/pre_rct/alltable/pre1h00_rct.csv" df = pd.read_csv(URL,encoding="SHIFT-JIS") #都道府県、地点、今日の最大値(mm)を表示 print(df[["都道府県","地点","今日の最大値(mm)"]]) |
実行したところ、CSVのデータが表示されました。
画像内のコメント(3,4,5行目を表示)はミスです。
定数として使う想定なので、「URL」は大文字で書いています。
1 |
URL = "http://www.data.jma.go.jp/obd/stats/data/mdrr/pre_rct/alltable/pre1h00_rct.csv" |
read_csvで、CSVファイルが置いてあるところを指定します。
今回はURLのところですね。
2つ目の引数で、文字コードのSHIFT-JISを指定します。
1 |
df = pd.read_csv(URL,encoding="SHIFT-JIS") |
printで表示するところで、行ではなく、今回は列を指定しています。
1 |
print(df[["都道府県","地点","今日の最大値(mm)"]]) |
これで行も列も指定して表示できるようになりました。
まとめ:read_csvで読み込み、文字コードに気を付ける
外部ライブラリのpandasを使ってCSVファイルを読み込みました。
read_csvで、ローカルやインターネット上のCSVファイルを指定します。
文字コードによってはエラーになります。
指定方法など、参考にしてみてくださいね。