我正在尝试在查找表中查找允许找不到元素和不存在元素的索引(空)。
例如,在下面的测试数据中,变量“ A”将映射到查找表中的“ A”并返回索引0(查找表中“ A”的位置)
我一直在寻找使用searchsorted函数,但是没有解释返回0还是N。
“如果没有合适的索引,则返回0或N(其中N是a的长度)。”
从下面开始,我想返回的数据是: [0,1,2,3,2]
0-匹配A, 1-匹配B, 2-找不到,否则, 3-没有值,因此为NULL, 2-否则找不到。
遵守规则:
如果匹配返回匹配索引, 如果NaN返回NULL, 如果找不到,则返回其他。
testData = np.array(['A','B','B ',NAN,'Other'])
testLookup =np.array(['A','B','ELSE','NULL'])
>>> np.searchsorted(testLookup,testData)
array([0, 1, 2, 0, 4], dtype=int32)
答案 0 :(得分:1)
NumPy不是为混合类型数组设计的。但是,如果您打算使用NumPy,则可以使用np.searchsorted
通过在之前进行布尔索引来适当地转换值。
请记住要指定dtype=object
,以避免将您的np.nan
值自动转换为字符串。
testData = np.array(['A','B','B ',np.nan,'Other'], dtype=object)
testLookup = np.array(['A','B','ELSE','NULL'])
arr = testData.copy()
nulls = np.array([x != x for x in arr])
arr[nulls] = 'NULL'
arr[~np.in1d(arr, testLookup[:2]) & ~nulls] = 'ELSE' # or use np.isin
res = np.searchsorted(testLookup, arr)
# array([0, 1, 2, 3, 2], dtype=int64)