【发布时间】:2020-03-20 06:26:03
【问题描述】:
我有一个 Pandas 数据框,如下所示,我正在尝试将 IP 地址转换为整数。
install Network subnet_bits Next Hop AS1 AS2 AS3 AS4
0 * 1.0.0.0 24.0 202.12.28.1 0 4777 13335 i NaN NaN
1 * 1.0.4.0 22.0 202.12.28.1 0 4777 6939 4826 38803 56203
2 * 1.0.4.0 24.0 202.12.28.1 0 4777 6939 4826 38803 56203
我正在使用ipaddress 库。似乎该指数正在阻碍。我不知道如何轻松地将 UP 地址转换为整数。
这是我的代码:
try:
network = int(ipaddress.IPv4Address(df['Network']))
print(network)
except ValueError:
print('address/netmask is invalid for IPv4:', df.Network)
这是错误信息:
address/netmask is invalid for IPv4:
0 1.0.0.0
1 1.0.4.0
2 1.0.4.0
【问题讨论】:
-
*属于哪一列? -
您希望
int(ipaddress.IPv4Address(...))的结果是什么?一个IP地址是四个数字,你想怎么转换成一个数字? -
@kaya3 IPv4 地址具有明确的表示为 32 位无符号整数。我想我们甚至可以说这是 IPv4 地址的原生格式!例如:en.wikipedia.org/wiki/IPv4#Addressing
-
@pabouk 不是很明确 - 它可以是大端或小端。此外,如果 OP 是这个意思,那么他们的问题需要这么说,因此我要求澄清。
-
@kaya3 IPv4 标头中的 32 位字段是 IP 地址的本机格式。 RFC datatracker.ietf.org/doc/html/rfc790 描述了位的顺序(您可以将其称为 32 位字段的字节顺序),还显示了对最常见的文本符号 - 点分十进制的转换。除了这种 IPv4 地址表示法之外,还有许多主要网络库和工具中实现的无点表示法(十进制的无符号整数 32 位)。试试这个:
ping 2130706433(2130706433 == 0x7f000001) 和ping 127.0.0.1一样
标签: python pandas integer ip-address