Pandas⑤ (データフレーム 列の追加)

データフレーム 列の追加

データフレームに 列を追加 する場合は、次のように指定します。

 データフレーム[‘列名’] = [データ, データ, ・・・]

辞書型データに 新しいキーと値 を設定するときと同じような感じになります。

以下のサンプルでは、‘D’ という列とデータを追加しています。

1
2
3
4
5
6
7
8
9
10
11
import pandas as pd
df = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['r1', 'r2', 'r3', 'r4', 'r5'] # 行名を設定
)

df['D'] = [1, 2, 3, 4, 5]

df

[実行結果]

データフレームに 列とデータを追加 することができました。

Pandas④ (データフレーム 行の追加)

データフレーム 行の追加

データフレームに行を追加する場合、追加する行をデータフレームとして作成し、append メソッドで追加しまします。

追加するデータフレームは列名を同じにしておく必要があります。

列名が異なると新規の列として追加されるので注意が必要です。

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
df1 = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
)
df2 = pd.DataFrame(
{'A': [60, 70, 80, 90, 100], # 列Aとその値
'B': [10.2, 11.6, 12.4, 14.3, 17.6], # 列Bとその値
'C': [-6, -12.6, -13.5, -14.3, -15.1] }, # 列Cとその値
)
df1.append(df2) # df1にdf2を追加

[実行結果]

新規の行が追加されましたが、追加した行のインデックスが 0 から開始されています。

元の行のインデックスに続くようにするためには、appendメソッドの引数に ignore_index=True を指定する必要があります。

1
df1.append(df2, ignore_index=True)  # 行インデックスを連続させる

[実行結果]

追加された行のインデックスが、元のデータから連続になっていることを確認できます。

indexオプションで行名を設定している場合は、追加する行データにも行名を付けてから追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
df1 = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['r1', 'r2', 'r3', 'r4', 'r5'] # 行名を設定
)
df2 = pd.DataFrame(
{'A': [60, 70, 80, 90, 100], # 列Aとその値
'B': [10.2, 11.6, 12.4, 14.3, 17.6], # 列Bとその値
'C': [-6, -12.6, -13.5, -14.3, -15.1] }, # 列Cとその値
index = ['r6', 'r7', 'r8', 'r9', 'r10'] # 行名を設定
)
df1.append(df2) # df1にdf2を追加する

[実行結果]

設定した行名にて、行が追加されていることを確認できます。

Pandas③ (データフレーム 行の取得)

データフレーム 行の取得

データフレーム から特定の行を取得するためには

データフレーム [ 開始行インデックス : 終了行の1つあとのインデックス ]

のように、開始位置終了位置を示すインデックスを指定します。

インデックスは 0 からカウントされます。

注意する点としては、終了位置を示すインデックスで、指定したインデックスよりも1つ手前までが抽出されます。

まずは、2行目から4行目までを抽出してみます。

1
2
3
4
5
6
7
8
9
import pandas as pd
df = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['row1', 'row2', 'row3', 'row4', 'row5'] # 行名を設定
)

df[1 : 4] # 2行目から4行目までを抽出

[実行結果]

次に、先頭の行から2行目までを抽出します。

1
df[: 2]               # 先頭の行から2行目までを抽出

[実行結果]

また、行名 を指定して行を抽出することもできます。

1
2
# 行名で抽出する
df['row1' : 'row3'] # row1からrow3までを抽出

[実行結果]

Pandas② (データフレーム 列の取得)

データフレーム 列の取得

データフレーム の列を取得する場合は、データフレーム[‘列名’] と指定します。

1
2
3
4
5
6
7
8
9
import pandas as pd
df = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['row1', 'row2', 'row3', 'row4', 'row5'] # 行名を設定
)

df['A'] # 列Aを取得

[実行結果]

複数の列 を取得する場合は、データフレーム[ ‘列名’, ‘列名’, ・・・・] というようにブラケットの中身を列名のリストで指定します。

1
df[['A', 'C']]          # A列、C列を取得

[実行結果]

指定した 列データ を取得することができました。

Pandas① (データフレーム)

Pandas

Pandas は、NumPy を拡張してさらに直感的な操作でデータを扱えるようにしたライブラリです。

データフレーム

Pandas には表形式でデータを管理できる データフレーム の機能が備わっています。

データフレーム は行列と同じように縦・横にデータが並ぶ構造をしていますが、数値だけではなく文字列などの任意のデータが扱えます。

また、行列のように 数値の並び を表すのではなく、行と列で構成されたデータ構造を表します。

データフレーム作成

データフレームは、DataFrameメソッド で作成します。

列データを辞書で設定し、複数の列で構成されるデータフレームを作成します。

1
2
3
4
5
6
7
8
9
10
11
# 3列×5行のデータフレームを作成する

import pandas as pd
df = pd.DataFrame(
{'A': [10, 20, 30, 40, 50], # 列Aとその値
'B': [0.8, 1.6, 2.4, 4.3, 7.6], # 列Bとその値
'C': [-1, -2.6, -3.5, -4.3, -5.1] }, # 列Cとその値
index = ['row1', 'row2', 'row3', 'row4', 'row5'] # 行名を設定
)

df

データフレーム のデータは、Pythonの 辞書 を使って設定します。

辞書データはそのまま各列のデータになります。

[実行結果]

データフレーム を、Google Colaboratory で表示すると自動的に表形式で表示されます。

NumPy⑳ (逆行列)

逆行列

逆行列 とは、ある正方行列 A、X の積が単位行列となるときの 正方行列 X のことです

単位行列 とは、行列の対角の要素が全て1、それ以外の成分が0 の行列です)

NumPytransposeメソッド を使うと、逆行列 を求めることができます。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np
a = np.array([[1, 2], # 2×2の行列を作成
[3, 4]]
)
inv = np.linalg.inv(a) # 逆行列を求める
print(inv)

[実行結果]

逆行列 を求めることができました。

元の行列と 逆行列 を掛け合わせると、単位行列 となることを確認します。

1
np.dot(a, inv)

[実行結果]

誤差はあるようですが、ほぼ 単位行列 となっていることが確認できました。

NumPy⑲ (転置行列)

転置行列

行列の行と列を入れ替えたものを 転置行列 と言います。

NumPytransposeメソッド を使うと、転置行列 を求めることができます。

[Google Colaboratory]

1
2
3
4
5
6
import numpy as np
a = np.array([[1, 2, 3], # 2×3の行列を作成
[4, 5, 6]]
)

np.transpose(a) # 転置行列を求める

[実行結果]

転置行列 を求めることができました。

NumPy⑱ (行列同士の積)

行列同士の積

NumPydotメソッド を使うと、行列同士の積を算出することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.array([[1, 2], # 2×2の行列を作成
[3, 4]]
)
b = np.array([[5, 6], # 2×2の行列を作成
[7, 8]]
)

np.dot(a, b) # 行列の積を求める

行列同士の積では、左側の行列は行に分け、右側の行列は列に分けて、行と列を組み合わせて掛け算します。

[実行結果]

行列同士の積を算出することができました。

NumPy⑰ (行列のアダマール積)

行列のアダマール積

NumPyでは、ブロードキャスト の要件を満たす場合(次元数が同じ場合)、 行列の要素同士の積(アダマール積)を算出することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.array([[2, 3], # 2×2の行列を作成
[2, 3]]
)
b = np.array([[3, 4], # 2×2の行列を作成
[5, 6]]
)

a * b # アダマール積を求める

[実行結果]

行列のアダマール積 を算出することができました。

NumPy⑯ (行列要素同士の加算・減算)

行列要素同士の加算・減算

NumPy で、行列のすべての要素に対して演算を行う仕組みを ブロードキャスト と言います。

行列に対してスカラー演算を行うと、ブロードキャスト の仕組みによって全ての要素に同じ演算が適用されます。

この ブロードキャスト の仕組みを使って、行列の要素同士足し算・引き算を行うことができます。

サンプルコード

まず2×2の行列を2つ定義して、足し算を行います。

[Google Colaboratory]

1
2
3
4
5
6
7
8
import numpy as np
a = np.array([[1, 2], # 2×2の行列を作成
[3, 4]]
)
b = np.array([[4, 3], # 2×2の行列を作成
[2, 1]]
)
a + b

[実行結果]

次に同じ行列を使って、引き算を行います。

[Google Colaboratory]

1
a - b

[実行結果]

行列の要素同士足し算引き算 を行うことができました。