0
我有一個DataFrame與源IP地址,我想檢查它們是否屬於記錄的CIDR範圍。對DataFrame列應用函數返回NoneType
netflow_df2["sip"].head(10)
timestamp
2016-10-04 16:24:58 40.101.X.X
2016-10-04 16:24:58 40.101.X.X
2016-10-04 16:24:58 40.101.X.X
2016-10-04 16:24:58 67.X.X.X
2016-10-04 16:24:58 10.1.1.X
2016-10-04 16:24:58 10.1.Y.Y
import ipaddress
import numpy
from collections import defaultdict
from pandas.util.testing import test_parallel
我把所有的記錄CIDRs我知道在一個字典:
# dict to key (vlan, designation)
nets = defaultdict(str)
nets["10.1.0.0/24"] = "13, web"
net["10.2.0.0/24"] = "14, department X"
net["10.3.55.0/24"] = "601, wifi"
...
net["10.1.243.0/24"] = "1337, IT"
我定義我的功能:
def netmap(ip, network_lookup_dict):
for key, value in network_lookup_dict.iteritems() :
if ipaddress.ip_address(unicode(ip)) in ipaddress.ip_network(unicode(key)):
return value
# print "VLAN: " + infos[0].strip() + ", Network designation: " + infos[1].strip()
else:
return numpy.NAN
現在我映射它:
@test_parallel(num_threads=4)
def apply_netmap(netflow_df2, location="ABC"):
% time netflow_df2["sip_infos"] = netflow_df2["sip"].map(lambda ip: netmap(ip, nets))
return netflow_df2
CPU times: user 3min 14s, sys: 21.2 s, total: 3min 36s
Wall time: 3min 5s
netflow_df3 = apply_netmap(netflow_df2)
我的錯誤是:
netflow_df3.head(10)
AttributeError: 'NoneType' object has no attribute 'head'
我的印象是這個函數會的netmap()
返回值映射到數據框欄下。這也是我返回NAN
的原因。這似乎並非如此。它也超級慢。
你的功能需要有'return netflow_df2' –
對不起,複製粘貼錯誤。 – wishi
這是什麼:if ipaddress.ip_address(unicode(ip))in ipaddress.ip_network(unicode(key)) –