【问题标题】:numpy: apply an arbitrary function to array elementnumpy:将任意函数应用于数组元素
【发布时间】:2020-06-06 03:03:26
【问题描述】:
import pandas as pd
from ipaddr import IPv4Address

df = pd.DataFrame([[1,'192.168.1.10', '45.7.12.34', 'abc'],[4, '10.10.1.11', '90.90.67.33', 'def'], [77, '52.1.7.90', '67.5.3.5', 'ghi' ], [90, '19.19.90.7', '77.88.99.44', 'xyz']], columns=['A', 'sip', 'dip', 'location'])

addrs = [(int)(IPv4Address(addr)) for addr in df[['sip', 'dip']].values.flatten().tolist()]

我想知道在转换为列表之前是否有 numpy 原生方式将函数应用于数组的每个元素?

【问题讨论】:

  • 有一个np.frompyfunc,但它的性能与列表理解相当,特别是如果结果应该是一个列表(而不是新的对象 dtype 数组)。只要您的函数必须为每个元素调用一次,迭代/累积机制在时间上不会产生太大差异。

标签: python pandas numpy ip-address


【解决方案1】:

使用 pandas(因为它已被标记)你也可以尝试使用来自 vanilla python 的 series.mapmap

[*map(int,df[['sip', 'dip']].stack().map(IPv4Address))]
#or list(map(int,df[['sip', 'dip']].stack().map(IPv4Address)))
#or df[['sip', 'dip']].stack().map(IPv4Address).astype('int64').tolist()

[3232235786,
 755436578,
 168427787,
 1515864865,
 872482650,
 1124401925,
 320035335,
 1297638188]

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2019-07-25
    • 2020-08-16
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    相关资源
    最近更新 更多