この記事では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講座レビューリスト