有没有办法在字典中对IP地址进行排序?

时间:2019-07-12 00:02:12

标签: python pandas ip-address

我正在使用Pandas对数据框进行排序。 少数列是需要排序的IP地址。

有没有一种方法可以通过熊猫轻松地按IP地址排序?是否可以创建可与熊猫一起使用的自定义功能来对IP地址进行排序?

我能够对IP地址列表进行排序,但是我很难弄清楚如何使用Pandas创建自定义排序功能。有没有办法从套接字模块中合并inet_aton?

我能够在熊猫以外的列表上完成此任务:

list_of_ips = ['192.168.204.111', '10.10.10.10', '172.16.32.6', '1.1.1.1', '8.8.8.100']
sorted(list_of_ips, key=lambda ip: struct.unpack("!L", inet_aton(ip))[0])
['1.1.1.1', '8.8.8.100', '10.10.10.10', '172.16.32.6', '192.168.204.111']

我希望数据框中的一列IP地址将与Pandas一起排序。

2 个答案:

答案 0 :(得分:2)

在大熊猫中,我们有argsort

df.iloc[np.argsort(list(map(socket.inet_aton,list_of_ips)))]

答案 1 :(得分:0)

cyberpandas 库在这种情况下可能很有用。与大熊猫配合使用。

IPArray

这是IPAddress数据的容器。即使您可以同时对IPv4和IPv6地址进行排序。

In [1]: from cyberpandas import IPArray

In [2]: import pandas as pd

In [3]: arr = IPArray(['192.168.1.1',
   ...:                '2001:0db8:85a3:0000:0000:8a2e:0370:7334'])
   ...: 

In [4]: arr
Out[4]: IPArray(['192.168.1.1', '2001:db8:85a3::8a2e:370:7334'])

通过以下链接查找官方文档

https://cyberpandas.readthedocs.io/en/latest/#usage

相关问题