猿问

在 Python 中使用布尔值

我正在尝试将数组中的字符串值替换为数组中位数,但是当我尝试创建布尔值时,我收到错误代码。我有一个包含3个字符串值的定义数组,我尝试输入的代码是:


arr2 = np.array ([1,2,3,1,5,2,3,4,2,

                  4,1,3,4,1,2,5,3,2,

                  1,"?",1,"n",3,2,5,

                  1,2,"Nan",3,2,2,4,3])


flag_good = [element.isdigit() for element in arr2]

flag_bad = ~flag_good

但是我在运行该行时收到错误代码:


flag_bad = ~flag_good

如何用数组的中位数替换 sting 值?


手掌心
浏览 140回答 2
2回答

白衣非少年

波浪号操作是 numpy 的一部分,是 numpy.invert 的快捷方式。通过使用列表理解,是一个Python列表,它不支持此操作。flag_good例如,您可以将列表转换为 Numpy 数组,然后使用 invert 函数。flag_good>>> flag_bad = ~np.array(flag_good)>>> flag_badarray([False, False, False, False, False, False, False, False, False,       False, False, False, False, False, False, False, False, False,       False,  True, False,  True, False, False, False, False, False,        True, False, False, False, False, False])或者,您可以使用矢量化并直接返回Numpy数组,其中函数按元素调用,而不是使用列表推导。>>> flag_good = np.vectorize(lambda x: x.isdigit())(arr2)>>> flag_bad = ~flag_good>>> flag_badarray([False, False, False, False, False, False, False, False, False,       False, False, False, False, False, False, False, False, False,       False,  True, False,  True, False, False, False, False, False,        True, False, False, False, False, False])

慕哥9229398

我觉得你可以从一开始就解决问题,编辑你的列表理解。flag_bad = [not(element.isdigit()) for element in arr2]不过,为了回答你的问题,我会这样做:import numpy as npinput_list = [1,2,3,1,5,2,3,4,2,                  4,1,3,4,1,2,5,3,2,                  1,"?",1,"n",3,2,5,                  1,2,"Nan",3,2,2,4,3]# calculate the medianmedian = int(np.median([elt for elt in input_list if type(elt) is int])) # replace elements of the list only if you have a non-int output_array = np.array([elt if type(elt) is int else median for elt in input_list])print(output_array)输出:[1 2 3 1 5 2 3 4 2 4 1 3 4 1 2 5 3 2 1 2 1 2 3 2 5 1 2 2 3 2 2 4 3]
随时随地看视频慕课网APP

相关分类

Python
我要回答