我有数据框,有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行。
目前,我这样实施
这个过程适用于一小组ip_ranges。但是对于大量的ip_ranges,这个过程需要更长的时间才能完成。
有没有更好的方法来更有效地执行此操作?
只是一个想法:将范围放入数据框ip_range
,列From
和To
。使用例如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
合并。