Сначала создайте словарь списка из ваших списков, меняйте значения и используйте Series.map
с последним удаленным .
на Series.str.rstrip
:
Примечание :
Если значение не существует ни в одном списке, функция 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'}