替换numpy数组中的空白

2024-10-01 15:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的numpy数组的第三列是年龄。在这一列中,大约75%的条目是有效的,25%是空白的。第2列是性别,通过一些操作,我计算出数据集中男性的平均年龄为30岁。我的数据集中女性的平均年龄是28岁。在

我想把男性的空白年龄值改为30岁,女性的空白年龄值改为28岁。在

但是我似乎做不到。有人有什么建议或知道我做错了什么吗?在

这是我的代码:

# my entire data set is stored in a numpy array defined as x

ismale = x[::,1]=='male'
maleAgeBlank = x[ismale][::,2]==''
x[ismale][maleAgeBlank][::,2] = 30 

不管出于什么原因,当我完成上面的代码时,我输入x来显示数据集,即使我将它们设置为30,空白仍然存在。请注意,我不能x[maleAgeBlank],因为该列表将包含一些女性数据点,因为女性数据点尚未排除在外。在

有办法得到我想要的吗?由于某些原因,如果我做x[ismale][::,1] = 1(将列设置为'male'等于1),这是可行的,但是x[ismale][maleAgeBlank][::,2] = 30不起作用。在

数组示例:

^{pr2}$

注意,我已经在上面的输出中将列2更改为0表示女性,1表示男性


Tags: 数据代码numpy条目原因数组空白male
3条回答

您可以使用where函数:

arr = array([['3', '1', '22', '1', '0', '7.25', '2'], 
            ['3', '', '22', '1', '0', '7.25', '2']], 
           dtype='<U82')

blank = np.where(arr=='')

arr[blank] = 20

array([[u'3', u'1', u'22', u'1', u'0', u'7.25', u'2'],
       [u'3', u'20', u'22', u'1', u'0', u'7.25', u'2']], 
      dtype='<U82')

如果要更改特定列,可以执行以下操作:

^{pr2}$

可以尝试用更简单的方法遍历数组。这不是最有效的解决办法,但它应该能完成任务。在

for row in range(len(x)):
    if row[2] == '':
        if row[1] == 1:
            row[2] == 30
        else:
            row[2] == 28

这个怎么样:

my_data =  np.array([['3', '1', '22', '0', '7.25', '2'],
                     ['1', '0', '38', '0', '71.2833', '0'],
                     ['3', '0', '26', '0', '7.925', '2'],
                     ['3', '0', '', '2', '23.45', '2'],
                     ['1', '1', '26', '0', '30', '0'],
                     ['3', '1', '32', '0', '7.75', '1']], 
                     dtype='<U82')

ismale = my_data[:,1] == '0'
missing_age = my_data[:, 2] == ''
maleAgeBlank = missing_age & ismale
my_data[maleAgeBlank, 2] = '30'

结果:

^{pr2}$

相关问题 更多 >

    热门问题