上級マクロ経済学
第6回 Pandas
1 Pandas
データを取り込む
前回までの内容は
- 基本的な数値の計算
- プロットの作成
など。 今回取り扱うPandasは
- データを実際に取り扱う
ためのライブラリ。
インポート
として利用する。
- データフレームと呼ばれる形式を取り扱える。
- Pythonの中で表を取り扱うイメージ。
- Excelやcsvファイルを読み込んだりするのに使う。
- Excelをデータフレームとして読み込みする。
- データフレームをExcelなどに書き出しもできる。
- ただ、書き出しするならcsvに書き出すのがおすすめです(圧倒的にバグが少ないので)。
データフレーム
データフレームを、pd.DataFrame()として保存する。
たいてい、dfと称される。
インデックスとカラム
DataFrameにはインデックスとカラムのラベルをつけることができる。
index- インデックス(行)名の入ったリストを指定
columns- カラム(列)名の入ったリストを指定
インデックスとカラムの取得
インデックスやカラムはそのリストの取得ができる。
データへのアクセス
カラム名を入れれば、その列の値がリストになって返ってくる。
データフレームの列追加
データフレームの作り方のおすすめは、
- 空のデータフレームを作って
- 列を追加していく
という方法。
df[<新しい列名>]=<リスト>とすれば、新しい列が追加される。
df[<既にある列名>]としないように注意。- 上書きされてしまいます。
列のラベルも追加できるので、管理も楽。
列追加によるデータフレームの作成
データへのアクセス
基本的に使うのは次の二つ
loc[<行名>, <列名>]- 行名、列名で行列を指定。
iloc[<行インデックス>, <列インデックス>]- 行インデックス、列インデックスで行列を指定。
行や列にスライス(:)を指定できる。
データアクセスの実例
data = np.arange(6).reshape(3,2)
df = pd.DataFrame(data, index = ["a","b","c"], columns=["A","B"])
df # データフレームの確認| A | B | |
|---|---|---|
| a | 0 | 1 |
| b | 2 | 3 |
| c | 4 | 5 |
:を列や行に指定すると、全てを抜き出す。
ndarrayへの変換
データフレームは、.valuesでndarrayに変換できる。
データフレームの読み込み
read_excel(<Excelファイルへのパス>)- Excelファイルの読み込み
read_csv(<csvファイルへのパス>)- csvファイルの読み込み
- 配布している
wage_and_productivity.xlsxファイルを、作業ファイルと同じフォルダ(ディレクトリ)に置いてください。
- Google Colaboratoryであれば、ファイルのアップロードをすればOKです。
- 相対パスを確認してください。
- 相対パスのスタート地点は、今作業しているファイルが存在しているフォルダ(ディレクトリ)です。
- スタート地点と同じフォルダ(ディレクトリ)にあるファイルへは
./<ファイル名>でアクセスできます。 - 実際は同じフォルダにあれば
./を省略してもアクセスできますが、コーディングのクセとしてつけておくことをお勧めします。
Excel読み込みのコード例
今回のケースの例では、以下のようにします。 (head()関数で、読み込んだdfの最初の方だけ表示しましょう。)
read_excelの補足
- 読み込むシートを
sheet_name=<シートの名前>指定できます。デフォルトでは、一番最初のシートが読み込まれます。 index_col=<カラムのNo>でインデックスにするカラムの番号を指定できます。header=<行のNo>で、カラムにする行を指定できます。ただし、headerで指定した行より前の行は読み込まれません。
| 労働生産性(円/時間) | 賃金所得(千円) | |
|---|---|---|
| 2020年 | ||
| 北海道 | 8997.702921 | 4232.5 |
| 青森 | 8946.026251 | 3667.9 |
| 岩手 | 8336.011457 | 3790.4 |
| 宮城 | 8875.070576 | 4459.4 |
| 秋田 | 8700.560140 | 3758.0 |
Index(['北海道', '青森', '岩手', '宮城', '秋田', '山形', '福島', '茨城', '栃木', '群馬', '埼玉', '千葉',
'東京', '神奈川', '新潟', '富山', '石川', '福井', '山梨', '長野', '岐阜', '静岡', '愛知', '三重',
'滋賀', '京都', '大阪', '兵庫', '奈良', '和歌山', '鳥取', '島根', '岡山', '広島', '山口', '徳島',
'香川', '愛媛', '高知', '福岡', '佐賀', '長崎', '熊本', '大分', '宮崎', '鹿児島', '沖縄'],
dtype='object', name='2020年')
read_csvについて
- csvファイルは、テキストファイルです。
- どんな中身か気になる人は、テキストエディタ(メモ帳など)でcsvファイルを開いてみてください。
- ファイルごとに文字コードが決まっています。
read_csvで読み込む際に文字コードを指定しないと文字化けしたり、読み込めなかったりします。- 文字コードは、
encoding=<文字コード>で指定できます。 - 日本語が含まれる場合、文字コードは
shift-jisで指定すればOKな場合が多いです。
- バグが少ない&ファイルが軽いので、可能ならこちらをメインに使うべき。
read_csvの例
エラー例
OK例
Excelやcsvへの書き出し
to_excel(<Excelファイルのパス>)- Excelファイルへの書き出し
to_csv(<csvファイルのパス>)- csvファイルへの書き出し
to_excelやto_csvを使うことで、データフレームを保存できます。
df = pd.DataFrame()
name = ["佐藤","鈴木","近藤"]
age = [20,30,28]
hobby = ["サッカー","野球","読書"]
df["名前"] = name
df["年齢"] = age
df["趣味"] = hobby
df # dfの確認| 名前 | 年齢 | 趣味 | |
|---|---|---|---|
| 0 | 佐藤 | 20 | サッカー |
| 1 | 鈴木 | 30 | 野球 |
| 2 | 近藤 | 28 | 読書 |
次のコマンドで、作業ファイルと同じフォルダにtest.xlsxが作成されていることを確認してください。
データフレームの検索
dfを条件で検索できる。 以下を参照。
まとめ
- データ解析をするためには、Pandasは必携。
- Excelなどの表データを読み込むのに、一番安定したpythonライブラリ。
- Pandasの挙動は少しクセがあるように感じるかもしれない。こればかりは慣れるほかない。