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

问题描述 投票:0回答:1

我有数据框,有2列。我想根据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列表以存储每个范围内的所有ips。例如[“45.43.144.0”,“45.43.144.1”,“45.43.144.2”,......,“45.43.161.255”]。所有ip范围的方式类似。
  • 从此列表中删除了重复的元素
  • 使用此列表构造数据框
  • 合并'ip'上的两个数据帧

这个过程适用于一小组ip_ranges。但是对于大量的ip_ranges,这个过程需要更长的时间才能完成。

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

pandas dataframe filter python-3.6 ip-address
1个回答
1
投票

只是一个想法:将范围放入数据框ip_range,列FromTo。使用例如df提供的快速代码将所有ip地址(也就是here中的地址)转换为十进制数。

现在可以快速生成范围:

ip_range['Rng'] = ip_range.apply(lambda x: np.arange(x.From, x.To+1), axis=1)

这些范围可以转换为DataFrame:

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

这个DataFrame可以很容易地与df合并。

© www.soinside.com 2019 - 2024. All rights reserved.