首页 > 解决方案 > 如何在 Pandas 中将所有 IP 地址列表转换为十进制数字

问题描述

有巨大的列表数据,如何将所有IP地址转换为pandas中的十进制数字并与第二列的值合并

   import pandas as pd
   filename = "/Users/sda/Desktop/file"
   pdd = pd.read_csv(filename,header=None,sep='|',error_bad_lines=False, warn_bad_lines=False,skiprows=[0],
              names=['Name','Code','Ipv', 'Ip','Range','Date', 'Category'])
   pd.options.display.max_columns = None
   k = pdd[pdd['Ipv'].str.contains("ipv4") & pdd['Ip'].str.contains('[0-9]')]
   print(k[['Ip','Range','Code']])

我的输出:

        Ip         Range    Code
     2.16.0.0      524288   EU
     200.109.100.0 1024     RU
     200.109.102.0 1024     RU

只需要获取第一个IP地址相同国家代码和范围号的十进制值。只与第二列的值合并

       IP         range code
    3362612224    2028  RU

标签: pandas

解决方案


IIUC,考虑到输出的数据框名称是df这样的:

import socket, struct

def ip2int(ip):
    """
    Convert an IP string to int
    """
    packedIP = socket.inet_aton(ip)
    return struct.unpack("!L", packedIP)[0]

df['ip_int'] = df.Ip.apply(ip2int)
df['range_sum']=df.groupby(['Code'])['Range'].transform('sum')
df[df.Code.duplicated(keep='last')]

               Ip  Range Code      ip_int  range_sum
 1  200.109.100.0   1024   RU  3362612224       2048

推荐阅读