Python 如何反转布尔数组
有时,任务是反转布尔数组。如果文件包含一个列,其中包含真或假值,并且需要以相反的方式使用列值,这通常是必需的。例如,如果CSV文件包含以True表示Covid阴性患者的数据列,并且需要创建一个Covid阳性状态的列。在这种情况下,需要对布尔值进行数组反转。本Python文章使用四个不同的示例介绍了使用numpy和不使用numpy的不同方法来反转布尔数组。此外,本文还展示了原始数组和反转数组的布尔值图。
用于获取布尔列数据的data.csv文件
Patientname,covidnegative
Raju,True
Meena,False
Happy,True
……,……
示例1:使用NumPy反转布尔数组并比较布尔值图
步骤
- 步骤1 - 首先导入pandas、numpy和plotly。Plotly是Python的开源绘图库,将用于制作散点图。
-
步骤2 - 现在读取data.csv文件,将其转换为数据框,并制作散点图,显示布尔列”covidnegative”在Y轴上。
-
步骤3 - 读取布尔列的值。现在使用NumPy函数将其转换为数组,然后使用NumPy的invert函数反转数组。
-
步骤4 - 向数据框中添加一个新列”covidpositive”,并添加反转的值。
-
步骤5 - 再次制作散点图,显示布尔列”covidpositive”在Y轴上。
-
步骤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的逻辑_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的情况下创建反转的数组。在第一个示例中,还比较了散点图,以显示布尔原始值以及反转的值。