プログラミングを勉強するサイトです。今まで使ってこなかった言語を新しく勉強し始めたのをきっかけに、プロブロを始めました。

【Python】Pandasを使ってCSVファイルを読み込む方法

【Python】Pandasを使ってCSVファイルを読み込む方法

 

外部ライブラリ「Pandas」を使って、CSVファイルを読み込みます。

読み込むCSVは、オープンデータにしました。[br num=”1″]気象庁の過去の気象データです。

出典:気象庁|「最新の気象データ」CSVダウンロード データ部掲載内容(1、3、6、12、24、48、72時間降水量)[br num=”1″] 最新のCSVファイル

ローカルのDドライブなどにダウンロードして読み込む方法や、URLを指定して直接読み込む方法を紹介します。

Pandasのインストール

表データを扱う外部ライブラリ「Pandas」。[br num=”1″]インストールがまだの場合は、ここで入れておきましょう。

Windowsの場合、次のコマンドで行います。

pip install pandas

 

Macの場合は、pipの部分がpip3になります。

初めてライブラリをインストールするという方は、もしかするとエラーに悩まされるかもしれません。[br num=”1″]こちらの記事で解決方法を解説していますので、参考にしてみてください。

【Python】pipコマンドでライブラリをインストールする手順

ローカル環境のCSVファイルを読み込む

まずはローカル環境のCSVファイルを読み込みます。[br num=”1″]ここでは、Pythonのソースファイルと同じ階層に「data」フォルダを作成し、その中に格納したCSVファイルを読み込んでいます。

文字コードがUTF-8の場合、そのまま読み込める

冒頭で書いた気象庁の気象データのCSVファイルです。[br num=”1″]UTF-8で保存しました。

 

次のソースコードで実行してみます。[br num=”1″]解説は後述します。

import pandas as pd

#CSVファイル読み込み
df = pd.read_csv("data/pre1h00_rct.csv")

print(df)

 

文字コードを指定しなくても、そのまま読み込めました。

 

使用するライブラリを、最初にインポートします。

import pandas as pd

as pd のように書けば、ライブラリを使うときpdと短く表記できます。[br num=”1″]as pd を書かない場合、読み込むところはこんな感じ。

df = pandas.read_csv("data/pre1h00_rct.csv")

ちょっと長くなりますね。

 

ライブラリのread_csvを使って、dataフォルダ内のCSVファイルを読み込んでいます。[br num=”1″]そして、読み込んだデータを、データフレームのdfに格納しています。

最後に、

print(df)

でdfを表示させます。

SJISなどの場合、SHIFT-JISを指定して読み込む

UTF-8で保存していたCSVファイルをコピペして、SJISで保存しなおしました。

 

UTF-8のときと同じように読み込もうとすると、次のようにエラーが表示されてしまいます。

 

どうやらSHIFT-JISを指定しないといけないようです。[br num=”1″]「えっ、SJISで保存したんじゃないの?」と思われるかもしれません。

そうなんです。[br num=”1″]SJISとSHIFT-JISが同じものだと思っていた頃が私にもありました・・・。[br num=”1″]同じならエラーにならないんですけんどね。

というわけで、SHIFT-JISを指定した場合のソースがこちら。

import pandas as pd

#CSVファイル読み込み
df = pd.read_csv("data/pre1h00_rct_sjis.csv",encoding="SHIFT-JIS")

print(df)

 

保存して実行してみます。[br num=”1″]ちゃんと読み込めました。

一部の行を指定して読み込む

こんどはスクレイピングしていきます。

行指定の例です。[br num=”1″]1つずつ解説していきますね。

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)

行数を指定する

まずは行数を指定する場合

print(df.loc[[3,4,5]])

df.locのところで、dfの3,4,5行目を指定しています。

実行したところ、3行分表示されました。

条件に一致する行を指定する

次は、都道府県の列が”東京都”と一致する行のみを指定します。

data_tokyo = df[df["都道府県"]=="東京都"]

dfの都道府県が東京都の行だけ、いったんdata_tokyoに格納しました。

 

print("東京都です\n", data_tokyo)

いったんデータフレームdata_tokyoに格納したデータを、ここで表示しています。

実行したところ、東京都の行が表示されました。

文字列を含む行を指定する

次はあいまい検索です。[br num=”1″]都道府県の列に北海道が含まれる行を表示させていきます。

「都道府県」という項目なのに、北海道 ○○地方という表現なんですよね。

data_hokkaido = df[df["都道府県"]=="北海道"]

と書いても、悲しいことに0件です。

北海道を含むなら、containsを使って次のように書きます。

data_hokkaido = df[df["都道府県"].str.contains("北海道")]

 

さっそく実行し、北海道 宗谷地方、北海道 檜山地方などが表示されました。

インターネット上のCSVファイルを読み込む

最後に、URLを指定して直接読み込んでいきます。

まず、ソースコードはこちら。[br num=”1″]のちほど解説しますね

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のデータが表示されました。[br num=”1″]画像内のコメント(3,4,5行目を表示)はミスです。

 

定数として使う想定なので、「URL」は大文字で書いています。

URL = "http://www.data.jma.go.jp/obd/stats/data/mdrr/pre_rct/alltable/pre1h00_rct.csv"

read_csvで、CSVファイルが置いてあるところを指定します。[br num=”1″]今回はURLのところですね。[br num=”1″]2つ目の引数で、文字コードのSHIFT-JISを指定します。

df = pd.read_csv(URL,encoding="SHIFT-JIS")

printで表示するところで、行ではなく、今回は列を指定しています。

print(df[["都道府県","地点","今日の最大値(mm)"]])

これで行も列も指定して表示できるようになりました。

まとめ:read_csvで読み込み、文字コードに気を付ける

外部ライブラリのpandasを使ってCSVファイルを読み込みました。

read_csvで、ローカルやインターネット上のCSVファイルを指定します。[br num=”1″]文字コードによってはエラーになります。[br num=”1″]指定方法など、参考にしてみてくださいね。

 

この記事をシェアする

記事一覧へ戻る

コメント Comments

コメント一覧

コメントはありません。

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックURL

https://pro-blo.com/python/scraping/read-csv-with-pandas/trackback/

関連記事 Relation Entry