You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python过滤数据集内的良性流量并输出高频恶意流量?

解决方案

直接按以下步骤修改代码即可实现需求:

步骤1:过滤良性流量(Protocol不以字母开头)

先筛选出Protocol列不以字母开头的流量(作业要求过滤掉以字母开头的良性流量),用正则匹配实现精准过滤:

# 排除Protocol以字母开头的行,保留恶意流量候选
filtered_nd = nd[~nd['Protocol'].str.match(r'^[A-Za-z]')]

这里~表示取反,r'^[A-Za-z]'匹配任意大小写字母开头的字符串,覆盖所有符合要求的良性流量规则。

步骤2:分组统计频率

按指定列分组并统计每组出现次数,同时将统计结果重命名为frequency,方便后续筛选:

# 分组统计,重置索引转为DataFormat格式,便于后续操作
grouped_result = filtered_nd.groupby(["Source", "Destination", "Protocol", "Length", "Info"]).size().reset_index(name='frequency')

步骤3:筛选高频恶意流量

过滤出frequency大于100的记录,同时按频率降序排序让结果更直观:

# 筛选频率超100的记录,按频率从高到低排列
final_result = grouped_result[grouped_result['frequency'] > 100].sort_values(by='frequency', ascending=False)

完整代码

整合所有步骤后的完整代码:

import pandas as pd

data = "C:/Schoolwork/Unit10.csv"
nd = pd.read_csv(data, sep=",", decimal=".", header=0)

# 1. 过滤良性流量
filtered_nd = nd[~nd['Protocol'].str.match(r'^[A-Za-z]')]

# 2. 分组统计频率
grouped_result = filtered_nd.groupby(["Source", "Destination", "Protocol", "Length", "Info"]).size().reset_index(name='frequency')

# 3. 筛选高频记录并排序
final_result = grouped_result[grouped_result['frequency'] > 100].sort_values(by='frequency', ascending=False)

print(final_result)

关键说明

  • 之前单独过滤UDP开头无效,是因为良性流量包含所有以字母开头的Protocol,正则匹配能覆盖全部符合要求的规则;
  • 用reset_index()将分组后的Series转为DataFrame,能保留所有列的完整信息,而非仅输出单条最高频结果。

内容的提问来源于stack exchange,提问作者parsons33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:05:11