如何在 Python 中反转布尔数组的元素?


有时,任务是反转布尔数组。如果文件包含一列具有真或假值的列,并且需要以反转的方式使用列值,则通常需要这样做。例如,如果 CSV 文件包含数据列作为 Covid 阴性状态,对 Covid 阴性患者显示 True,并且需要创建 Covid 阳性状态的列。在这种情况下,需要对布尔值进行数组反转。在这篇 Python 文章中,使用四个不同的示例,给出了在使用或不使用 numpy 的情况下反转布尔数组的不同方法。此外,本文还显示了表示原始数组和反转数组中布尔值的图形。

用于获取布尔列数据的 data.csv 文件

Patientname,covidnegative
Raju,True
Meena,False
Happy,True
……,……

示例 1:使用 Numpy 反转布尔数组并比较布尔值图

算法

  • 步骤 1 − 首先导入 pandas、numpy 和 plotly。Plotly 是 Python 的开源绘图库,将用于制作散点图。

  • 步骤 2 − 现在读取 data.csv 文件,将其转换为数据帧,并制作一个散点图,在 Y 轴上显示布尔列“covidnegative”。

  • 步骤 3 − 读取布尔列值。现在使用 numpy 函数将其转换为数组,然后使用 numpy 的 invert 函数反转数组。

  • 步骤 4 − 在数据帧中添加一个新的列“covidpositive”并添加反转的值。

  • 步骤 5 − 再次制作一个散点图,在 Y 轴上显示布尔列“covidpositive”。

  • 步骤 6 − 编写函数以显示散点图。使用 cmd 窗口运行程序。图表将在浏览器的新选项卡中打开。比较两个图表的 y 轴。

#include the required libraries
import pandas as pd
import numpy as np

#This library is needed to make the scatter plot
import plotly.express as pxx

#read the csv file and make a dataframe
dff = pd.read_csv("data.csv")

#print the colums and data 
#make the scatter plot
figg = pxx.scatter(dff, x="patientname", y="covidnegative")

#set the properties of the scatter plot
figg.update_traces(marker=dict(size=12, line=dict(width=2, color="blue")), selector=dict(mode='markers'))

#display the chart
figg.show()
covidstatus=dff["covidnegative"]
arr = covidstatus.to_numpy()

#print(arr)
arr_inver = np.invert(arr)

#print(arr_inver)
dff['covidpositive'] = arr_inver.tolist()

#print(dff)
#make the scatter plot
figg = pxx.scatter(dff, x="patientname", y="covidpositive")

#set the properties of the scatter plot
figg.update_traces(marker=dict(size=12, line=dict(width=2, color="red")), selector=dict(mode='markers'))

#display the chart
figg.show() 

输出

在命令窗口中运行 Python 文件 −

下图显示了原始和反转数组中布尔值的图。

示例 2:使用  ~ 对 Numpy 的数组反转布尔值数组

算法

  • 步骤 1 − 首先导入 pandas 和 numpy。

  • 步骤 2 − 现在读取 data.csv 文件,将其转换为数据帧,并打印数据帧。

  • 步骤 3 − 读取布尔列值。现在使用 numpy 函数将其转换为数组,然后使用 numpy 数组上的 ~ 反转数组。

  • 步骤 4 − 在数据帧中添加一个新的列“covidpositive”并添加反转的值。再次打印数据帧。

  • 步骤 5 − 使用 cmd 窗口运行程序。比较原始和反转值的布尔列。

#include the required libraries
import pandas as pd
import numpy as npp

#read the csv file and make a dataframe
dff = pd.read_csv("data.csv")
print("\nDataframe showing Boolean Value Column in CSV file")
print(dff)
covidstatus=dff["covidnegative"]
arr01 = covidstatus.to_numpy()
print("\nBoolean Column of CSV as array: ")
print(arr01)
inverted_arr01 = ~npp.array(arr01, dtype=bool)
print("\nBoolean Column of CSV as inverted array : ")
print(inverted_arr01)
dff['covidpositive'] = inverted_arr01.tolist()
print("\nNew dataframe with inverted column added :")
print(dff) 

输出

在命令窗口中运行 Python 文件 −

示例 3:使用  Numpy 的 Logical_not 反转布尔值数组

算法

  • 步骤 1 − 首先导入 pandas 和 numpy。

  • 步骤 2 − 现在读取 data.csv 文件,并将其转换为数据帧。

  • 步骤 3 − 读取布尔列值。现在使用 numpy 函数将其转换为数组并打印它。现在使用 NumPy 数组上的 logical_not 反转数组并再次打印它。

  • 步骤 4 − 在数据帧中添加一个新的列“covidpositive”并添加反转的值。

  • 步骤 5 − 使用 cmd 窗口运行程序。比较两个数组中原始值和反转值。

#include the required libraries
import pandas as pd
import numpy as npp

#read the csv file and make a dataframe
dff = pd.read_csv("data.csv")
covidstatus=dff["covidnegative"]
arr01 = covidstatus.to_numpy()
print("\nA given boolean array: ", arr01)
arr_inver = npp.logical_not(arr01)
print("\nThe inverted boolean array: ", arr_inver)
dff['covidpositive'] = arr_inver.tolist()

#print(dff) 

输出

在命令窗口中运行 Python 文件 −

示例 4:不使用  Numpy 反转布尔值数组

算法

  • 步骤 1 − 导入 CSV,然后使用 csv.DictReader 读取包含布尔值列的 CSV 文件。

  • 步骤 2 − 创建单独的空数组以保存来自 CSV 文件列的值,并将列值追加到这些数组。

  • 步骤 3 − 定义一个函数“reverse_bool”将 true 转换为 false,将 false 转换为 true 并返回反转的值。

  • 步骤 4 − 使用 map 函数使用“reverse_bool”函数将每个 false 转换为 true,将 true 转换为 false。

  • 步骤 5 − 使用 cmd 窗口运行程序。比较两个数组中原始值和反转值。

invertbool3.py
# importing the module
import csv
 
# open the file in read mode
filename01 = open('data.csv', 'r')
 
# creating dictreader object
file01 = csv.DictReader(filename01)

# creating empty lists
covidstatus = []
name=[]
def reverse_bool(status):
   if status == "True":
      return "False"
   elif status == "False":
      return "True"
print('\nMaking the arrays from the columns of data.csv file')
# iterating over each row and append
# values to empty list
for col in file01:
   covidstatus.append(col['covidnegative'])
   name.append(col['patientname'])
# printing lists
print('\nThe patient name:',name)
print('\nCovid -ve Status:', covidstatus)
print('\nReversing the boolean arrays made from the columns of data.csv file')
resultbool = list(map(reverse_bool, covidstatus))
print('\nCovid -ve Status:', covidstatus)
print('\nCovid +ve Status:', resultbool)

输出

在命令窗口中运行 python 文件 −

在这篇 Python 文章中,通过四个不同的示例,给出了如何反转布尔数组的方法。前三种方法使用 NumPy 的函数来反转布尔值。然后编写一个 Python 程序来创建反转数组而不使用 numpy。在第一个示例中,还比较了散点图,以显示布尔原始值以及反转值。

更新于: 2023年5月4日

806 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告