Python 3.8中如何一步替换np.array不同元素为指定值?
一步实现Numpy数组值替换 + 解决Pandas报错问题
原始问题:一步替换数组值
你可以用Numpy的np.isin结合np.where实现一步替换,代码简洁且效率高:
import numpy as np a = np.array([20, 10, 5, 10, 5, 10]) result = np.where(np.isin(a, [20, 10]), 1, 0) # 输出:array([1, 1, 0, 1, 0, 1])
原理是np.isin(a, [20,10])会生成布尔数组标记出20或10的位置,np.where根据这个标记把对应位置替换成1,其余替换成0。
如果后续需要更复杂的多值映射,也可以用字典结合np.vectorize(适合小规模数组,大数组优先用isin):
mapping = {20: 1, 10: 1, 5: 0} vec_mapper = np.vectorize(lambda x: mapping[x]) result = vec_mapper(a)
编辑部分:解决Pandas的ValueError报错
你遇到的ValueError: Data must be 1-dimensional是因为传入的是二维数组,而pd.Series要求输入一维数据,解决方法如下:
方法1:展平数组
import pandas as pd import numpy as np a = np.array([[20, 5, 10, 5, 10, 7, 5]]) # 用flatten()将二维数组展平为一维 a_series = pd.Series(a.flatten()) result = a_series.replace({20:1, 10:1, 7:1, 5:0}).values
方法2:直接提取数组行数据
因为你的二维数组只有一行,直接通过索引a[0]提取一维数据即可:
a_series = pd.Series(a[0]) result = a_series.replace([20,10,7], 1).replace(5, 0).values
内容的提问来源于stack exchange,提问作者shashank ranjan
相关产品推荐
相关产品推荐

