Pandas 如何根据ip范围过滤数据帧

Pandas 如何根据ip范围过滤数据帧,pandas,dataframe,filter,python-3.6,ip-address,Pandas,Dataframe,Filter,Python 3.6,Ip Address,我有一个dataframe,它有两列。我想根据json文件中的ip范围过滤这个数据帧 ip_ranges.json [ {"start": "45.43.144.0", "end": "45.43.161.255"} {"start": "104.222.130.0", "end": "104.222.191.255"} ... ] 数据帧: ip,p_value 97.98.173.96,3.7 73.83.192.21,6.9 ... 注意:ip_range.js

我有一个dataframe,它有两列。我想根据json文件中的ip范围过滤这个数据帧

ip_ranges.json

[
    {"start": "45.43.144.0", "end": "45.43.161.255"}
    {"start": "104.222.130.0", "end": "104.222.191.255"}
    ...
]
数据帧:

ip,p_value
97.98.173.96,3.7
73.83.192.21,6.9
...
注意:ip_range.json包含100k个元素,而我的数据帧有300k行

目前,我是这样实现的

  • 创建python列表以存储每个范围内的所有IP。例如[“45.43.144.0”、“45.43.144.1”、“45.43.144.2”、…、“45.43.161.255”]。所有ip范围都采用类似的方式
  • 已从此列表中删除重复的元素
  • 使用此列表构造数据帧
  • 在“ip”上合并了两个数据帧
此过程适用于一小组ip_范围。但对于一组较大的ip_范围,该过程需要较长的时间才能完成


有没有更好的方法来更有效地执行此操作?

只是一个想法:将您的范围放入一个数据框
ip\u范围
,其中包含列
From
to
。例如,使用提供的快速代码将所有ip地址(也包括
df
中的ip地址)转换为十进制数字

现在可以快速生成范围:

ip_范围['Rng']=ip_范围。应用(λx:np.arange(x.From,x.To+1),轴=1)

这些范围可以转换为数据帧:

ips=pd.DataFrame(itertools.chain(*ip_range['Rng'))


这个数据帧可以很容易地与
df

合并,我不确定最终想要的输出,但是对于初学者,您想检查数据帧中
ip
列的每个ip是否在
ip\u ranges.json的任何范围内吗?