Python 如何使用apply函数和lambda函数将列表的值添加到列值?
我想使用apply函数和lambda函数从列表值中添加列中的值 我已经尝试使用“for”,但它花费了很多时间,因为有很多行(超过60000行) 比如说 如果“连接类型”为“snmpgetattack”,则“攻击类型”必须为“R2L”Python 如何使用apply函数和lambda函数将列表的值添加到列值?,python,python-3.x,pandas,lambda,apply,Python,Python 3.x,Pandas,Lambda,Apply,我想使用apply函数和lambda函数从列表值中添加列中的值 我已经尝试使用“for”,但它花费了很多时间,因为有很多行(超过60000行) 比如说 如果“连接类型”为“snmpgetattack”,则“攻击类型”必须为“R2L” dos=['udpstorm','apache2','mailbomb','back','neptune','land',', “蓝精灵”、“泪珠”、“可处理”、“吊舱”] probe=['satan','nmap','portsweep','mscan','ip
dos=['udpstorm','apache2','mailbomb','back','neptune','land',',
“蓝精灵”、“泪珠”、“可处理”、“吊舱”]
probe=['satan','nmap','portsweep','mscan','ipsweep','saint']
r2l=['httptunnel'、'ftp_write'、'worm'、'imap'、'xlock'、'多跳',
'warezmaster'、'named'、'snmpguess'、'phf'、'snmpgetattack',
'xsnoop'、'guess_password'、'sendmail']
首先从列表中创建列表字典,交换值并与最后删除的
一起使用,方法是:
注意:
print (d)
{'udpstorm': 'dos', 'apache2': 'dos', 'mailbomb': 'dos', 'back': 'dos', 'neptune': 'dos', 'land': 'dos', 'smurf': 'dos', 'teardrop': 'dos', 'processtable': 'dos', 'pod': 'dos', 'satan': 'probe', 'nmap': 'probe', 'portsweep': 'probe', 'mscan': 'probe', 'ipsweep': 'probe', 'saint': 'probe', 'httptunnel': 'r2l', 'ftp_write': 'r2l', 'worm': 'r2l', 'imap': 'r2l', 'xlock': 'r2l', 'multihop': 'r2l', 'warezmaster': 'r2l', 'named': 'r2l', 'snmpguess': 'r2l', 'phf': 'r2l', 'snmpgetattack': 'r2l', 'xsnoop': 'r2l', 'guess_password': 'r2l', 'sendmail': 'r2l'}
如果值不存在于任何列表中,map
函数返回错误值NaN
。例如
因为列表中没有normal
,所以在样本数据中为normal.
值
d1 = {'dos':dos,'probe':probe,'r2l':r2l}
#swap key values in dict
#http://stackoverflow.com/a/31674731/2901002
d = {k: oldk for oldk, oldv in d1.items() for k in oldv}
df['attack_type'] = df['connection_type'].str.rstrip('.').map(d)
详细信息:
print (d)
{'udpstorm': 'dos', 'apache2': 'dos', 'mailbomb': 'dos', 'back': 'dos', 'neptune': 'dos', 'land': 'dos', 'smurf': 'dos', 'teardrop': 'dos', 'processtable': 'dos', 'pod': 'dos', 'satan': 'probe', 'nmap': 'probe', 'portsweep': 'probe', 'mscan': 'probe', 'ipsweep': 'probe', 'saint': 'probe', 'httptunnel': 'r2l', 'ftp_write': 'r2l', 'worm': 'r2l', 'imap': 'r2l', 'xlock': 'r2l', 'multihop': 'r2l', 'warezmaster': 'r2l', 'named': 'r2l', 'snmpguess': 'r2l', 'phf': 'r2l', 'snmpgetattack': 'r2l', 'xsnoop': 'r2l', 'guess_password': 'r2l', 'sendmail': 'r2l'}
谢谢但它不起作用。在数据帧中只有“Nan”。就像下面一样@YoungdongKim-在
连接类型中,每个值的末尾总是有
?@YoungdongKim-如果是,请尝试通过df['attack\u type']=df['connection\u type'].str.rstrip('.')。映射(d)
天哪,我错过了'。'每个值的结尾…我做到了!谢谢