pandas多条件模糊搜索(sql, like)

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/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值