【发布时间】:2022-01-06 13:06:30
【问题描述】:
我有一个带有一组 IP 规则的 Pandas 数据框。规则本身是存储为字符串的 IPv4 CIDR 地址,因此可能涵盖一个 IP 或可能涵盖多个 IP,并且还有规则名称和优先级列。我想首先按规则优先级对这个数据帧进行排序,然后按规则涵盖的 IP 数量。我使用ipaddress 模块中的IPv4Network 类尝试了几种方法:
-
.sort_values()和key=lambda x: IPv4Network(x.str()).num_addresses以及其他几个变体 - 使用相同的
IPv4Network(df['Rule']).num_addresses逻辑添加一个计算列,但无法使其工作 - 例如finalrules = finalrules.assign(num_addresses=lambda x: IPv4Network(x['Rule']).num_addresses)
我收到了来自 IPv4Network 类的异常,这表明我可能没有从数据框中取回字符串?不知何故,这种方法似乎也从数据框中删除了列,最后我只剩下Rule 列。我应该逐项迭代,还是需要编写一个理解对列进行操作的函数,或者如何解决这个问题?我觉得我对 .assign 的实际作用缺乏了解。
【问题讨论】:
标签: python pandas dataframe ip-address