pandas.DataFrame
は表形式のデータを扱うのに便利である。
表形式データは内部的にはExcelのように行や列を持っているのだが、ときには特定の列だけ抽出したり、特定の列を削除したい場合がある。
特定の1列だけであれば df["カラム名"]
で抽出、 df.drop("カラム名",axis=1)
で列の削除ができる。
しかし複数のカラムに対して抽出、削除するにはどうすればいいのか。
そこで今回はpandas.DataFrameで複数カラム指定して抽出、削除する方法について紹介する。
この記事を書いている人
記事を読むメリット
pandas.DataFrameで複数カラム指定して抽出、削除する方法がわかり、データフレームの列操作が得意になる
データ準備
データをまず用意する。
以下の内容のCSVを score_sample.csv
として保存する。
CSV
a,12,100
b,13,105
c,12,90
d,13,85
そしてpandas.DataFrameとして read_csv()
で読み込む。
DATA
import pandas as pd df1 = pd.read_csv("score_sample.csv") print(df1) # id age score # 0 a 12 100 # 1 b 13 105 # 2 c 12 90 # 3 d 13 85
このデータを使って解説する。
1カラムの抽出、削除する方法
まずは1カラム(列)の抽出、削除をしてみる。
冒頭で紹介したように特定の1列だけであれば df["カラム名"]
で抽出、 df.drop("カラム名",axis=1)
で列の削除ができる。
カラム抽出
print(df1["id"]) # 0 a # 1 b # 2 c # 3 d # Name: id, dtype: object print(type(df1["id"])) # <class 'pandas.core.series.Series'>
1列だけ抽出すると、 DataFrame
ではなく Series
のtypeが返ってくる。
カラム削除
print(df1.drop("id",axis=1)) # age score # 0 12 100 # 1 13 105 # 2 12 90 # 3 13 85
複数カラム指定して抽出、削除(エラー)
では複数カラムに対して抽出・削除をするにはどうしたらいいのか。
1列と同じやり方で複数列指定してみる。
カラム抽出
print(df1["id","age"]) # File "pandas\_libs\hashtable_class_helper.pxi", line 1626, in pandas._libs.hashtable.PyObjectHashTable.get_item # KeyError: ('id', 'age')
"id"
を "id","age"
のように複数で指定して抽出しようとしたがエラーになった。
カラム削除
print(df1.drop("id","age",axis=1)) # TypeError: drop() got multiple values for argument 'axis'
drop()
もカラム名を複数指定しようとしたらエラーになった。
pandas.DataFrameで複数カラム指定して抽出、削除する方法
エラーにならずにpandas.DataFrameで複数カラム指定して抽出、削除するにはどうするのか。
答えは「配列としてカラム名を渡す」である。
カラム抽出
print(df1[["id","age"]]) # id age # 0 a 12 # 1 b 13 # 2 c 12 # 3 d 13 print(type(df1[["id","age"]])) # <class 'pandas.core.frame.DataFrame'>
"id"
を ["id","age"]
のように配列形式で指定して抽出すると DataFrame形式で指定したカラムのみ抽出できる。
カラム削除
print(df1.drop(["id","age"],axis=1)) # score # 0 100 # 1 105 # 2 90 # 3 85
同じように drop()
にも配列形式でカラム名を渡せば複数カラムを削除することが可能。
まとめ
今回はpandas.DataFrameで複数カラム指定して抽出、削除する方法について紹介した。
ポイントは以下の通り。
ココがポイント
- 複数カラム抽出:
df[["カラム名1","カラム名2"]]
- 複数カラム削除:
df.drip(["カラム名1","カラム名2"],axis=1)
- 複数カラムは配列で指定すること
他にもpandas関連の記事もあるので、もし気になるものがあれば見てみて欲しい。