上級マクロ経済学
第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の挙動は少しクセがあるように感じるかもしれない。こればかりは慣れるほかない。