Pandas 如何根据ip范围过滤数据帧
我有一个dataframe,它有两列。我想根据json文件中的ip范围过滤这个数据帧 ip_ranges.jsonPandas 如何根据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
[
{"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\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的任何范围内吗?