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

pythonserver side programmingprogramming更新于 2024/2/24 15:01:00

有时,任务是反转布尔数组。如果文件包含具有真值或假值的列,并且需要以反转的方式使用列值,则通常需要这样做。例如,如果 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。在第一个示例中,还比较了散点图以显示布尔原始值以及反转值。


相关文章