【发布时间】:2019-05-13 09:08:55
【问题描述】:
如何通过在数组 B 中查找数组 A 中的值来合并以下两个数组?
数组 A:
array([['GG', 'AB', IPv4Network('1.2.3.41/26')],
['GG', 'AC', IPv4Network('1.2.3.42/25')],
['GG', 'AD', IPv4Network('1.2.3.43/24')],
['GG', 'AE', IPv4Network('1.2.3.47/23')],
['GG', 'AF', IPv4Network('1.2.3.5/24')]],
dtype=object)
和数组 B:
array([['123456', 'A1', IPv4Address('1.2.3.5'), nan],
['987654', 'B1', IPv4Address('1.2.3.47'), nan]],
dtype=object)
这里的目标是创建 Array C,通过在 Array A 中查找 Array B 中的 IPv4Address 并比较它们,得到对应数组的第二个值并存储它:
数组 C:
array([['123456', 'A1', IPv4Address('1.2.3.5'), nan, 'AF'],
['987654', 'B1', IPv4Address('1.2.3.47'), nan, 'AE']],
dtype=object)
IP 地址属于这种类型:https://docs.python.org/3/library/ipaddress.html#ipaddress.ip_network
我怎样才能做到这一点?
编辑:
请注意,合并以 IP 匹配为条件,因此结果数组 C 将具有与数组 B 相同数量的数组,但它会多一个值。建议的重复链接没有回答相同的问题。
【问题讨论】:
-
如果你有 Pandas,为什么要用 NumPy 做这个?它不会真的更快。
-
我在尝试创建您的 A 数组时收到此错误:
ValueError: 1.2.3.41/26 has host bits set -
@huynhsamha 这是虚拟数据,我没有输入真实的IP地址,也许这就是原因
-
那么请努力确保数据有效,以便至少可以复制粘贴并运行。
-
您需要的唯一答案是 object-dtype numpy 数组毫无意义,它们没有为您提供我们首先使用 numpy 的速度或内存优势。只需使用一个列表并在本机 python 中完成它。
标签: python arrays numpy vectorization