Python

pandas.DataFrameでbool値を反転する方法

2022-08-13

pandas.DataFrameでbool値を反転する方法

pandasのTrue/Falseを反転するにはどうしたらいいの?


表形式のデータを扱うのに便利なpandas.DataFrame

CSVやEXCELのデータを取り込んで、表形式のデータとして扱うことが出来る。

データの中には文字列、数値の他にTrue/Falseのboolean形式も含まれる。

そんなbool値を反転させたいこともあるだろうが、どのように反転させれば良いのだろうか

そこで今回はpandas.DataFrameでbool値を反転する方法について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

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のカラムにかけるとエラーになってしまう。

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().


直訳すると「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 も例外を発生させます)。

参考:pandas.DataFrame.bool — pandas 1.4.3 documentation


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関連の記事もあるので、もし気になるものがあれば見てみて欲しい

ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-Python
-

© 2024 ITips