有大量的列表数据,如何将所有IP地址转换为熊猫中的十进制数字并与第二列的值合并
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
答案 0 :(得分:1)
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