如何在 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。在第一个示例中,还比较了散点图,以显示布尔原始值以及反转值。