将混合数据转换为字符串numpy。

3

我有这个数组:

z = np.array(['43', '65', '41', '47', '46', '73', '99', '52', '56', '23', '07',
       'C3', '49', '62', '54', 'A1', '88', '70', '42', 74.0, 20.0, 21.0,
       4, 62, 2, 3, 49, 79, '13', 'F4', 'A9', '20', '19', 19.0, 23.0,
       70.0, 83, 61, 80, 81, 66, 82, 63, '09', '06', 'F8'], dtype=object)

在这个数组中,我们有一个包含整数(int)、字符串(str)和浮点数(float)的混合数组。我想将它们全部转换成字符串形式,但是浮点数必须转换成整数,而像'07'、'09'之类的值也必须转换成'7'、'9'等格式。我希望得到以下结果:
z = np.array(['43', '65', '41', '47', '46', '73', '99', '52', '56', '23', '7',
       'C3', '49', '62', '54', 'A1', '88', '70', '42', '74', '20', '21',
       '4', '62', '2', '3', '49', '79', '13', 'F4', 'A9', '20', '19', '19', '23',
       '70', '83', '61', '80', '81', '66', '82', '63', '9', '6', 'F8'], dtype=object)

我尝试过这种方法

def col_convert(array):
    for i in range(len(array)):
        try:
            array[i] = str(int(array[i]))
        except:
            next
    return array   

然而,对于100万个元素,这种解决方案还是很慢。有没有更快的方式来处理这个任务?


你为什么要使用 split('.') - mkrieger1
你为什么想要一个字符串的 numpy 数组作为结果呢?拥有一个 数字 数组不是更好吗? - mkrieger1
你提出的解决方案移除了字符串。你不需要检查类型。 - Ehsan
@mkrieger1 因为我想把它们作为字符串进行评分,在我们公司可以将它们视为区号(区号包括数字和字符串)。 - Long_NgV
编写一个小函数,它接受一个元素,确定其类型并应用必要的转换,然后返回该字符串。然后只需使用列表推导将其应用于整个数组(或列表)。没有一个完整的“numpy”函数可以处理您想要的所有情况。对于这样的任务,对象dtype数组不如列表优越。 - hpaulj
1个回答

3

尝试:

z1 = np.array([str(i).split('.')[0] for i in z])

更新:根据OP的编辑,移除了前导零:

z1 = np.array([str(i).lstrip('0').split('.')[0] for i in z])

谢谢您,先生。我已经编辑了我的帖子。我还想将以0开头的值(例如“07”,“09”,“06”)转换为“7”,“9”,“6”。 - Long_NgV
1
@Long_NgV,请查看我的帖子编辑,以涵盖0。谢谢。 - Ehsan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接