在Python Pandas中如何将除443外的网络端口归类为‘other’分类?
端口分类标记解决方案
首先注意:你当前的代码df2.loc[df2['Src Port'] == 443] = 'HTTPS'会把匹配到的整行所有列都设置为'HTTPS',这显然不是你想要的——你应该只修改Src Port列,所以第一步先修正这部分:
# 仅修改Src Port列中值为443的行 df2.loc[df2['Src Port'] == 443, 'Src Port'] = 'HTTPS'
接下来给其余端口标记为other,有几种简洁的实现方式:
方法1:先统一赋值再替换(适合多端口扩展)
先把所有端口默认设为other,再单独替换目标端口,这种方式逻辑清晰,后续要加其他端口(比如80对应HTTP)也方便扩展:
# 先给所有行的Src Port设为other df2['Src Port'] = 'other' # 再将值为443的行替换为HTTPS df2.loc[df2['Src Port'] == 443, 'Src Port'] = 'HTTPS'
注:如果原Src Port是数值类型,执行第一步后会转为字符串/object类型,后续可以转成分类类型
方法2:一行代码搞定(numpy.where)
用numpy的where函数做条件判断,一行完成标记:
import numpy as np # 条件满足则设为HTTPS,否则设为other df2['Src Port'] = np.where(df2['Src Port'] == 443, 'HTTPS', 'other')
方法3:pandas原生where方法
用pandas自带的where方法,保留满足条件的值,其余替换为other,再把数值443转成字符串:
# 保留值为443的行,其余设为other df2['Src Port'] = df2['Src Port'].where(df2['Src Port'] == 443, 'other') # 将数值443替换为HTTPS字符串 df2['Src Port'] = df2['Src Port'].replace(443, 'HTTPS')
最后,如果需要把该列转为分类类型(节省内存,适合后续分析),执行:
df2['Src Port'] = df2['Src Port'].astype('category')
内容的提问来源于stack exchange,提问作者Anjana Kavidu
相关产品推荐
相关产品推荐

