如何在 Python 中反转布尔数组的元素?
有时,任务是反转布尔数组。如果文件包含具有真值或假值的列,并且需要以反转的方式使用列值,则通常需要这样做。例如,如果 CSV 文件包含数据列作为 Covid Negative 状态,显示 covid -ve 患者的 True,并且需要创建 covid+ve 状态的列。在这种情况下,需要对布尔值进行数组反转。在这篇 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 轴。
#包含所需的库 import pandas as pd import numpy as np #需要此库来制作散点图 import plotly.express as pxx #读取 csv 文件并制作数据框 dff = pd.read_csv("data.csv") #打印列和数据 #制作散点图 figg = pxx.scatter(dff, x="patientname", y="covidnegative") #设置散点图的属性 figg.update_traces(marker=dict(size=12, line=dict(width=2, color="blue")), selector=dict(mode='markers')) #显示图表 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) #制作散点图 figg = pxx.scatter(dff, x="patientname", y="covidpositive") #设置散点图的属性 figg.update_traces(marker=dict(size=12, line=dict(width=2, color="red")), selector=dict(mode='markers')) #显示图表 figg.show()
输出
在命令窗口中运行 Python 文件 −
下图显示了原始数组和反转数组中布尔值的图。
示例 2:在 Numpy 数组上使用 ~ 反转布尔值数组
算法
步骤 1 - 首先导入 pandas 和 numpy。
步骤 2 - 现在读取 data.csv 文件,将其转换为数据框,然后打印数据框。
步骤 3 - 读取布尔列值。现在使用 numpy 函数将其转换为数组,然后使用 numpy 数组上的 ~ 反转数组。
步骤 4 - 在数据框中添加新列"covidpositive"并添加反转的值。再次打印数据框。
步骤 5 - 使用 cmd 窗口运行程序。比较原始值和反转值的布尔列。
#包含所需的库 import pandas as pd import numpy as npp #读取 csv 文件并制作数据框 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 窗口运行程序。比较两个数组中的原始值和反转值。
#包含所需的库 import pandas as pd import numpy as npp #读取 csv 文件并创建数据框 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 # 导入模块 import csv # 以读取模式打开文件 filename01 = open('data.csv', 'r') # 创建 dictreader 对象 file01 = csv.DictReader(filename01) # 创建空列表 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') # 遍历每一行并附加 # 值到空列表 for col in file01: covidstatus.append(col['covidnegative']) name.append(col['patientname']) # 打印列表 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。在第一个示例中,还比较了散点图以显示布尔原始值以及反转值。