import pandas as pd
import random
protocol_type_dict = {
0: "任意",
1: "ICMP",
6: "TCP",
17: "UDP"
}
# 数据源
data_list = []
for i in range(1, 20):
item = {
"src_ip": f"192.168.10.{i}",
"dst_ip": f"192.168.10.{i + 1}",
"dst_port": 200,
"protocol_type": 1,
"create_time": f"2022-09-20 {random.randint(1, 20)}:49:23",
}
data_list.append(item)
# 搜索条件
condition_dict = dict(src_ip="192.168", dst_ip="10",
start_time="2022-09-20 15:00:00", end_time="2022-09-20 18:00:00",
dst_port=2)
df = pd.DataFrame(data_list)
# 数值比较
df = df[df["create_time"] >= condition_dict.get("start_time")]
df = df[df["create_time"] <= condition_dict.get("end_time")]
# 字符串模糊搜索
df = df[df["src_ip"].str.contains(condition_dict.get("src_ip"))]
df = df[df["dst_ip"].str.contains(condition_dict.get("dst_ip"))]
# int -->str
print(df.head().dtypes)
df['dst_port'] = df["dst_port"].astype(str)
print(df.head().dtypes)
df = df[df["dst_port"].str.contains(str(condition_dict.get("dst_port")))]
# 新增列
if not df.empty:
df["protocol_type_name"] = df.apply(lambda x: protocol_type_dict.get(int(x.protocol_type)), axis=1)
print(df.to_dict(orient='records')) # orient 用来转换格式的
# 参考资料
https://stackoverflow.com/questions/22291565/pandas-text-matching-like-sqls-like
https://pandas.pydata.org/docs/getting_started/comparison/comparison_with_sql.html
https://blog.csdn.net/hamagudu/article/details/116308173
https://blog.csdn.net/weixin_41018467/article/details/89159443
https://datatofish.com/integers-to-strings-dataframe/
pandas多条件模糊搜索(sql, like)
于 2022-09-21 00:45:48 首次发布