この記事ではpandasライブラリにおけるDataFrame(データフレーム)の使い方を具体的に解説します。
サンプルコードをコピペしながらサクサク処理を試せますので、 ぜひ活用してみてください。
ライブラリのインストール
初めにpythonの実行環境にpandasライブラリをインストールしましょう。
ターミナル(mac)もしくはコマンドプロンプト(Windows)で以下を実行します。
pip install pandas
最終行に「Successfully installed 〜〜〜」と表示されていれば、インストールは成功です。
pandasでデータフレームを作成
pandasのDateFrame
は2次元配列、もしくは複数の1次元配列(リストなど)からデータテーブルを構成するオブジェクトです。
基本的なDataFrame
の作成方法を見ていきましょう。
DataFrame
の引数data
に配列を指定することでデータフレームを作成できます。
複数の1次元配列から作成
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 複数の1次元配列からDataFrameを作成
df = pd.DataFrame(data=[data1, data2, data3])

複数の1次元配列を並べて作成した場合のDataFrame
の構造です。
1次元配列が順に各行の値となっていることがわかります。
辞書型配列から作成
DataFrame
を辞書型の配列から作ることもできます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 辞書型からDataFrameを作成
df = pd.DataFrame(data={"A": data1, "B": data2, "C": data3})

辞書型の配列からDataFrame
を作成した場合、列名が辞書のキー、列の値が辞書の要素となる特徴があります。
numpyのndarray配列から作成
pythonのnumpyモジュールで構成される配列からもDataFrame
を作成することができます。
import pandas as pd
import numpy as np
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# numpyのndarray配列からDataFrameを作成
df = pd.DataFrame(np.array([data1, data2, data3]))

numpyのndarray
配列からDataFrame
を作成する場合、複数の1次元配列から作成するのとデータ構造は同じになります。
列名・行名を指定
作成したDataFrame
の列名や行名を指定してみましょう。
列名(columns)を指定
DataFrame
に列名を指定してみます。
引数columns
にDataFrame
の列数と同じ要素数の配列を指定することで、列名を指定することができます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 列名を指定
df = pd.DataFrame(data=[data1, data2, data3], columns=['col_1', 'col_2', 'col_3', 'col_4'])

行名(index)を指定
DataFrame
の行名を指定してみます。
引数index
にDataFrame
の行数と同じ要素数の配列を指定することで、行名を指定することができます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 行名を指定
df = pd.DataFrame(data=[data1, data2, data3], index=['row_1', 'row_2', 'row_3'])

DataFrameの編集
列を追加
DataFrame
に列を追加してみましょう。
df["列名"] = 配列
によって、DataFrame
に新たな列を追加することができます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame(data={"A": data1, "B": data2, "C": data3})
# 列を追加
df["D"] = [12, 13, 14, 15]


行を追加
DataFrame
に行を追加してみましょう。
df.loc["行名"] = 配列
で新たに行を追加することができます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# 行を追加
df.loc["row_5"] = [100, 200, 300]


列の値を更新
DataFrame
の列の値を更新してみましょう。
既存の列名に対して、df["列名"] = 新しい配列
とすることで列の値を更新することができます。
値を更新すると古い値が書き変わってしまうため注意が必要です。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# A列の値を更新
df["A"] = [10, 100, 1000, 10000]


行の値を更新
DataFrame
の行の値を更新してみましょう。
既存の行名に対して、df.loc["行名"] = 新しい配列
とすることで列の値を更新することができます。
値を更新すると古い値が書き変わってしまうため注意が必要です。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# 行row_3の値を更新
df.loc["row_3"] = [10, 100, 1000]


列の削除(drop)
既存のDataFrame
から列を削除してみましょう。
列を削除するにはdf.drop("列名", axis=1, inplace=True)
を使用します。
inplace=True
と指定することで削除前のDataFrameを上書きし、置き換えます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# C列を削除(axis=1で列を削除)
df.drop("C", axis=1, inplace=True)


行の削除(drop)
既存のDataFrame
から行を削除してみましょう。
行を削除するにはdf.drop("行名", axis=0, inplace=True)
を使用します。
inplace=True
と指定することで削除前のDataFrame
を上書きし、置き換えます。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# 行row_4を削除(axis=0で行を削除)
df.drop("row_4", axis=0, inplace=True)


DataFrameから特定の値を取得
特定の列の値を取得
既存のDataFrame
から特定の列の値を取得してみましょう。
特定の列の値を取得するにはdf["列名"].values
を使用します。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])

上のようなDataFrame
のB列の値を取得してみましょう。
# B列の値を取得
print(df["B"].values)
# 出力結果
[4 5 6 7]
複数の列をまとめて取得
複数の列をまとめて取得することもできます。
複数列を取得するにはdf[列名の配列]
を使用します。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# B, C列を取得
df_BC = df[["B", "C"]]

B列とC列のDataFrame
を取得されていることがわかります。
特定の行の値を取得
既存のDataFrame
から特定の列の値を取得してみましょう。
特定の列の値を取得するにはdf.loc["行名"].values
を使用します。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])

上のDataFrame
から行row_2の値を取得してみましょう。
# 列row_2の値を取得
data_r2 = df.loc["row_2"]
print(data_r2.values)
# 出力結果
[1 5 9]
複数の行をまとめて取得
複数の行をまとめて取得することもできます。
複数行を取得するにはdf.loc[行名の配列]
を使用します。
import pandas as pd
data1 = [0, 1, 2, 3]
data2 = [4, 5, 6, 7]
data3 = [8, 9, 10, 11]
# 基準のDataFrameを作成
df = pd.DataFrame({"A": data1, "B": data2, "C": data3}, index=['row_1', 'row_2', 'row_3', 'row_4'])
# 行row_2, row_3を取得
df_r23 = df.loc[["row_2", "row_3"]]

行row_2と行row_3のDataFrame
が取得されていることがわかります。
まとめ
今回はpandasライブラリでDataFrame
を扱う方法を具体的に紹介しました。
データ整理やデータ分析の際にpandasのDataFrame
オブジェクトはとても便利ですので、ぜひ活用してみてください。


