表形式のデータを扱うのに便利なpandas.DataFrame
。
CSVやEXCELのデータを取り込んで、表形式のデータとして扱うことが出来る。
データの中には文字列、数値の他にTrue/Falseのboolean形式も含まれる。
そんなbool値を反転させたいこともあるだろうが、どのように反転させれば良いのだろうか。
そこで今回はpandas.DataFrameでbool値を反転する方法について紹介する。
この記事を書いている人
記事を読むメリット
pandas.DataFrameでbool値を反転する方法がわかり、pandasでのデータ加工が得意になる
データ準備
ではどうすればpandas.DataFrameでbool値を反転できるのか。
pandas.DataFrameのbool値の反転する方法を試す前に、まずはbool値を持つDataFrameを準備する。
DATA
import pandas as pd data_list1 = [ ["a",True], ["b",True], ["c",False], ["d",True] ] col_list1 = ["col1","col2"] df1 = pd.DataFrame(data=data_list1, columns=col_list1) print(df1) # col1 col2 # 0 a True # 1 b True # 2 c False # 3 d True
これでデータの準備ができた。
このデータを使って反転を試してみる。
notではpandas.DataFrameのbool値は反転できない
bool値の反転でまず考えられるのは not
だろう。
だが not
ではpandas.DataFrameのbool値は反転できない。
実際に試してみる。
SAMPLE
df1["not_col2"] = not df1["col2"] print(df1) # ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
このように not
をpandas.DataFrameのカラムにかけるとエラーになってしまう。
直訳すると「Seriesの真偽は曖昧である」となる。
ちなみに指示通りに .bool()
を使っても同じエラーが起こる。
SAMPLE
print(df1["col2"].bool()) # ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
これは要素の数が1個でないためエラーになっている。
これはブール値のスカラー値で、True または False でなければなりません。Series または DataFrame に正確に 1 つの要素がない場合、またはその要素がブール値でない場合は、ValueError が発生します (整数値 0 および 1 も例外を発生させます)。
Seriesの要素数を1にすればTrue/Falseを取得でき、反転も出来る。
SAMPLE
df1_false = df1.loc[ df1["col2"] == False ] print(df1_false) # col1 col2 # 2 c False print(df1_false["col2"].bool()) # False print(not df1_false["col2"].bool()) # True
しかしこれではpandas.DataFrameのbool値を反転したことにはならない。
どうしたら反転できるのか。
pandas.DataFrameでbool値を反転する方法
notではpandas.DataFrameのbool値は反転できなかった。
ではどうすればpandas.DataFrameのbool値を反転できるのか。
その方法は ~
。
~
を使うことでpandas.DataFrameのbool値を反転できる。
SAMPLE
df1["not_col2"] = ~df1["col2"] print(df1) # col1 col2 not_col2 # 0 a True False # 1 b True False # 2 c False True # 3 d True False
このようにcol2のbool値を反転することができた。
まとめ
今回はpandas.DataFrameでbool値を反転する方法について紹介した。
ポイントは以下の通り。
ココがポイント
- DataFrameでbool反転には
~
を使う not
を使うとエラーになる
他にもpandas関連の記事もあるので、もし気になるものがあれば見てみて欲しい。