Есть ли способ сортировки ip-адресов в словаре? - PullRequest
3 голосов
/ 12 июля 2019

Я использую Pandas для сортировки фрейма данных.Несколько столбцов - это IP-адреса, которые необходимо отсортировать.

Есть ли способ легко сортировать по IP-адресам с помощью Pandas?Можно ли создать пользовательскую функцию, которую я могу использовать с Pandas для сортировки IP-адресов?

Мне удалось отсортировать список IP-адресов, однако мне сложно понять, как создавать пользовательские функции сортировки с помощью Pandas,Есть ли способ включить inet_aton из модуля сокета?

Мне удалось выполнить эту задачу в списке за пределами Pandas:

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 ]

2 голосов
/ 12 июля 2019

В пандах у нас есть argsort

df.iloc[np.argsort(list(map(socket.inet_aton,list_of_ips)))]
0 голосов
/ 12 июля 2019

Библиотека cyberpandas может быть полезна в этом случае.Хорошо работает с пандами.

IPArray

Это контейнер для ваших данных IP-адреса.Даже вы можете сортировать адреса 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

...