【问题标题】:Is there a way to sort ip-addresses in a dictionary?有没有办法在字典中对 IP 地址进行排序?
【发布时间】:2019-11-21 17:36:08
【问题描述】:

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

有没有办法通过 Pandas 轻松按 IP 地址排序?是否可以创建一个可以与 Pandas 一起使用的自定义函数来对 IP 地址进行排序?

我能够对 IP 地址列表进行排序,但是我很难弄清楚如何使用 Pandas 创建自定义排序功能。有没有办法从 socket 模块中合并 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']

我希望使用 Pandas 对数据框中的一列 IP 地址进行排序。

【问题讨论】:

  • 您可以将值为inet_aton 的列添加到数据框,然后您可以使用熊猫对其进行排序。除了inet_aton,你也可以输入ipaddress

标签: python pandas ip-address


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在 pandas 中,我们有 argsort

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

    【讨论】:

    • 谢谢您,先生,这非常有效!请注意,由于这是一个数据框,我将“list_of_ips”替换为我的数据框的字典键值,它也可以正常工作 --> df.iloc[np.argsort(list(map(socket.inet_aton,df.sip)))]
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-03-04
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多