Python

PythonのPandasを使ってデータ抽出、追加、削除をする方法について

By 2021年7月18日No Comments

この記事ではPythonの標準モジュールであるpandasを使ってDataFrameのデータ抽出、追加、削除をする方法について解説していきます。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト

まずはpandasをインポートします。

import pandas as pd

今回は下記のpandasで作成したDataFrameを基にデータ抽出や削除、追加をしていきます。

import pandas as pd

df = pd.DataFrame([[30, 'ヤマダ',  '東京'], [30, 'タナカ', '大阪'], [35, 'ウエダ', '大阪']],
                  columns=['年齢', '名前', '出身地'],
                  index=['ユーザー1', 'ユーザー2', 'ユーザー3'])
print(df)

結果:

        年齢 名前  出身地
ユーザー1 30 ヤマダ 東京
ユーザー2 30 タナカ 大阪
ユーザー3 35 ウエダ 大阪

PythonのPandasでloc[ ]やiloc[ ]などを使ってデータ抽出する方法

Pandasのデータ抽出する一つの方法としてloc[ ]を使う事ができます。loc[ ]は行や列名を指定して1つの要素や範囲を指定して複数の要素を抽出することができます。構文は下記になります。

DataFrame型変数.loc[‘行名’, ‘列名’]

まずは指定した行のデータを抽出します。

print(df.loc['ユーザー1'])

結果:

年齢 30
名前 ヤマダ
出身地 東京
Name: ユーザー1, dtype: object

ユーザー1の行の値を抽出する事ができました。

列名を指定してデータを抽出します。列のみを指定する場合は行名を指定する部分に:を指定します。

print(df.loc[:, '名前'])

結果:

ユーザー1 ヤマダ
ユーザー2 タナカ
ユーザー3 ウエダ
Name: 名前, dtype: object

行名と列名を指定して特定の部分のデータを抽出します。

print(df.loc['ユーザー2', '出身地'])

結果:

大阪

ユーザー2の’出身地’だけ抽出する事ができました。

ilocを使うと行番号や列番号を指定してデータを抽出することができます。

まずは行番号を指定してデータ抽出をします。

print(df.iloc[0])

結果:

年齢 30
名前 ヤマダ
出身地 東京
Name: ユーザー1, dtype: object

列番号を指定します。行を指定する部分に:を指定します。

print(df.iloc[:, 1])

結果:

ユーザー1 ヤマダ
ユーザー2 タナカ
ユーザー3 ウエダ
Name: 名前, dtype: object

行と列の番号を指定して特定部分のデータを抽出します。

print(df.iloc[1, 2])

結果:

大阪

スライスを利用してデータの抽出する範囲を決めることもできます。スライスについて書かれた記事はこちらになります。

print(df.iloc[0:2, 1:])

結果:

          名前 出身地
ユーザー1 ヤマダ 東京
ユーザー2 タナカ 大阪

このようにスライスで範囲を指定して取得する事ができました。

条件に一致する行のみデータ抽出をする事もできます。

print(df[df['年齢'] == 30])

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー2 30 タナカ 大阪

特定の文字列を含んでいるデータを抽出するにはcontains( )関数を使います。

print(df[df['名前'].str.contains('ダ')])

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー3 35 ウエダ 大阪

このように名前の’ダ’が部分一致した文字列があるデータの抽出する事ができました。

query( )関数を使ってPandasのDataFrameの列や行を条件指定してデータ抽出する方法

列の値に対する条件を指定した行のデータ抽出にquery( )関数を使います。比較演算子の条件指定をquery( )関数を使うことでより簡潔にできます。

まずは、query( )関数を使わずに比較演算子を使って条件指定をして行をデータ抽出してみます。

print(df[df['年齢'] < 32])

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー2 30 タナカ 大阪

上記のような比較演算子をquery( )関数を同様の条件を下記のように指定できます。列名に対する条件は文字列で指定します。

print(df.query('年齢 < 32'))

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー2 30 タナカ 大阪

query( )関数を使うことで簡潔に記載する事ができました。その他にもquery( )関数を使って様々な条件指定していきます。

否定形のnot演算子を使って取得します。

print(df.query('not 年齢 < 32'))

結果:

        年齢 名前 出身地
ユーザー3 35 ウエダ 大阪

==を使ってデータを一致させて取得します。 文字列内の文字列はクォーテーションで囲む必要があります。

print(df.query('出身地 == "大阪"'))

結果:

        年齢 名前 出身地
ユーザー2 30 タナカ 大阪
ユーザー3 35 ウエダ 大阪

!=を使うと条件と一致しなかったデータを取得します。

print(df.query('出身地 != "大阪"'))

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京

inを使って複数の条件を指定してデータ抽出する事もできます。

print(df.query('名前 in ["ヤマダ", "ウエダ"]'))

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー3 35 ウエダ 大阪

このようにquery( )関数を使って様々な条件指定をしてデータ抽出を簡潔に記載することができます。

PandasのDataFrameの指定した行や列を削除する方法

DataFrameの特定の行や列を削除するにはdrop( )関数で指定するとインデックスの行を削除する事ができます。

print(df.drop("ユーザー3"))

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー2 30 タナカ 大阪

drop( )関数の引数に指定した”ユーザー3″が削除されました。

リストで指定することで複数の行を削除することもできます。

print(df.drop(["ユーザー2", "ユーザー3"]))

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京

列の削除をするにはdrop( )関数の第2引数にaxis=1と指定する必要があります。

print(df.drop('年齢', axis=1))

結果:

          名前 出身地
ユーザー1 ヤマダ 東京
ユーザー2 タナカ 大阪
ユーザー3 ウエダ 大阪

“年齢”の列が削除されています。

より簡単な方法としてdel文を使って削除するもできます。

del df['年齢']
print(df)

結果:

          名前 出身地
ユーザー1 ヤマダ 東京
ユーザー2 タナカ 大阪
ユーザー3 ウエダ 大阪

このように様々な方法でDataFrameの行や列を削除することができます。

PandasのDataFrameに列や行を追加する方法

DataFrameに新たな列や行を追加するには下記のようにdf[ ]に新しい列名を指定することで新たな列を追加されます。

df['身長'] = [170, 175, 180]
print(df)

結果:

        年齢 名前 出身地 身長
ユーザー1 30 ヤマダ 東京 170
ユーザー2 30 タナカ 大阪 175
ユーザー3 35 ウエダ 大阪 180

このように新しく”身長”の列が追加されました。

追加するリストの要素数とDataFrameの行数が一致していないとエラーになります。

df['身長'] = [170, 175, 180, 190]
print(df)

結果:

ValueError: Length of values (4) does not match length of index (3)

assign( )関数を使っても新たな列を追加できます。引数に列名=[値]で列名とその値を指定します。

print(df.assign(体重=[65, 55, 70]))

結果:

        年齢 名前 出身地 体重
ユーザー1 30 ヤマダ 東京 65
ユーザー2 30 タナカ 大阪 55
ユーザー3 35 ウエダ 大阪 70

DataFrameに新しく行名を追加するには下記のようにloc[ ]に新たな行名を指定すると追加できます。

df.loc['ユーザー4'] = [20, 'キムラ', '福岡']
print(df)

結果:

        年齢 名前 出身地
ユーザー1 30 ヤマダ 東京
ユーザー2 30 タナカ 大阪
ユーザー3 35 ウエダ 大阪
ユーザー4 20 キムラ 福岡

このように、DataFrameに新しいデータを追加する事ができました。

まとめ

この記事では、pandasのDataFrameのデータ抽出、削除、追加の方法について解説しました。以上、PythonのpandasのDataFrameを扱う方法についてでした。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL