機械学習基礎理論独習

誤りがあればご指摘いただけると幸いです。数式が整うまで少し時間かかります。リンクフリーです。

勉強ログです。リンクフリーです
目次へ戻る

【Python実装】Pandasの基礎

Pandasの基礎的なことをまとめていきます。

Pandasの概要

PandasはNumpyを基盤にシリーズ(Series)とデータフレーム(DataFrame)というデータ型を提供しています。
importするときは以下のように書くことが多いです。

import pandas as pd

Seriesとは

Seriesは1次元データです。
Seriesオブジェクトを作るには、Seriesを使います。

import pandas as pd
ser = pd.Series([10, 20, 30, 40])
ser

f:id:olj611:20210630222410p:plain

DataFrameとは

DataFrameは2次元のデータです。
DataFrameオブジェクトを作るには、DataFrameを使います。

import pandas as pd
df = pd.DataFrame([[10, "a", True],
                   [20, "b", False],
                   [30, "c", False],
                   [40, "d", True]])
df

f:id:olj611:20210630223949p:plain

headとtail

headメソッドを使用すると、DataFrameの先頭の5行のみを出力します。

import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(100).reshape(25, -1))
df.head()

f:id:olj611:20210630230511p:plain

tailメソッドを使用すると、DataFrameの末尾の5行のみを出力します。
コードは省略

DataFrameのサイズ

DataFrameのサイズを知るには、shape属性を使います。
コード省略

インデックス名(行の名前)、カラム名(列の名前)

DataFrameには行の名前、列の名前を指定できます。

import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(6).reshape(3, 2))
df.index = ["01", "02", "03"]
df.columns = ["A", "B"]
df

f:id:olj611:20210630234854p:plain

また、DataFrame作成時にインデックス名とカラム名を設定できます。

import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(6).reshape(3, 2),
                  index = ["01", "02", "03"],
                  columns = ["A", "B"])
df

f:id:olj611:20210630234854p:plain

辞書(dict)形式でDataFrameを作る

import numpy as np
import pandas as pd
df = pd.DataFrame({"A列": [0, 2, 4], "B列": [1, 3, 5]})
df

f:id:olj611:20210630235528p:plain

データの抽出

DataFrameを作ります。

import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(12).reshape(4, 3),
                  columns=["A", "B", "C"],
                  index=["1行目", "2行目", "3行目", "4行目"])
df

f:id:olj611:20210701001306p:plain

カラム名を直接指定して抽出する方法を見ていきます。

df["A"]

f:id:olj611:20210701001338p:plain

次に複数のカラムを取得します。

df[["A", "B"]]

f:id:olj611:20210701001443p:plain

次にインデックスを指定してデータを抽出します。

df[:2]

f:id:olj611:20210701001610p:plain

locとiloc

これら2つのメソッドを使った抽出方法の方が、角カッコより明示的です。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(12).reshape(4, 3),
                  columns=["A", "B", "C"],
                  index=["1行目", "2行目", "3行目", "4行目"])
df.loc[:, :]

f:id:olj611:20210701143220p:plain

最初にlocメソッドを使って、AカラムのみをSeriesとして抽出します。

df.loc[:, "A"]

f:id:olj611:20210701143605p:plain

複数のカラムをlocメソッド使って抽出します。

df.loc[:, ["A", "B"]]

f:id:olj611:20210701143952p:plain

次にインデックス方向の抽出を見ていきます。

df.loc["1行目", :]

f:id:olj611:20210701144426p:plain

複数のインデックス名を指定してみます。

df.loc[["1行目", "3行目"], :]

f:id:olj611:20210701144856p:plain

インデックス名とカラム名の両方を指定してみます。

df.loc[["1行目"], ["A", "C"]]

f:id:olj611:20210701145038p:plain

ilocではインデックス番号、カラム番号を指定します。
以下の例では、整数の4が出力されます。

df.iloc[1, 1]

f:id:olj611:20210701145315p:plain

インデックスを範囲で、カラムを位置で指定してみます。
Seriesが出力されます。

df.iloc[1:, 1]

f:id:olj611:20210701145603p:plain

インデックスもカラムも範囲で指定します。
DataFrameが出力されます。

df.iloc[1:, :2]

f:id:olj611:20210701145824p:plain

データ読み込み:CSVファイル

import pandas as pd
df = pd.read_csv("/content/drive/MyDrive/Python/Pythonによるデータ分析の教科書/data/201704health.csv", encoding="utf-8")
df

f:id:olj611:20210701154823p:plain

データ読み込み:Excelファイル

import pandas as pd
df = pd.read_excel("/content/drive/MyDrive/Python/Pythonによるデータ分析の教科書/data/201704health.xlsx")
df

f:id:olj611:20210701155128p:plain

スクレピング

日本語版Wikipediaの「トップレベルドメイン一覧」から「国別コードトップレベルドメイン」の表を抜き出します。

import pandas as pd
url = "https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%83%E3%83%97%E3%83%AC%E3%83%99%E3%83%AB%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E4%B8%80%E8%A6%A7"
tables = pd.read_html(url)
len(tables)

f:id:olj611:20210701162859p:plain

欲しい表はインデックス番号4と知っている(事前に調べておいた)ので、以下のように抜き出します。

df = tables[4]
df

f:id:olj611:20210701163045p:plain

データ書き込み:CSVファイル

test

データ書き込み:Excelファイル

目次へ戻る