Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用apply函数和lambda函数将列表的值添加到列值?_Python_Python 3.x_Pandas_Lambda_Apply - Fatal编程技术网

Python 如何使用apply函数和lambda函数将列表的值添加到列值?

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

我想使用apply函数和lambda函数从列表值中添加列中的值

我已经尝试使用“for”,但它花费了很多时间,因为有很多行(超过60000行)

比如说 如果“连接类型”为“snmpgetattack”,则“攻击类型”必须为“R2L”

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)
天哪,我错过了'。'每个值的结尾…我做到了!谢谢