You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更Pythonic且高效的方法处理数据集IP地址,去除第四个八位组?

高效处理IP地址去除第四个八位组的方法

原始数据集

012
100.0.200.0160.60.30.0NaN
NaN101.60.10.010.0.0.1

目标处理结果

012
100.0.200160.60.30NaN
NaN101.60.1010.0.0

当前低效实现代码

def sliceip(row):
 row = str(row)
 return row.rsplit(".",1)[0]

def applysliceip(rowx):
 for i, item in enumerate(rowx):
     rowx[i] = sliceip(item)
 return rowx

# 应用到整个DataFrame
split_IPs = IPs.apply(lambda row: applysliceip(row))

高效Pythonic实现方案

方法1:向量化str.rsplit操作

Pandas的字符串方法支持批量处理,完全不需要手动循环,效率和内存表现远优于逐元素操作:

split_IPs = IPs.apply(lambda col: col.str.rsplit(".", 1).str[0])

更简洁的写法可以借助stack()统一处理后恢复结构:

split_IPs = IPs.stack().str.rsplit(".", 1).str[0].unstack()

方法2:正则替换

用正则匹配末尾的.数字格式直接替换为空,操作简单且高效:

split_IPs = IPs.replace(r'\.\d+$', '', regex=True)

正则表达式\.\d+$精准匹配IP地址的第四个八位组,替换后自动保留原有的NaN值。

方法3:定位截取

先找到每个IP最后一个.的位置,再截取前面的内容:

split_IPs = IPs.apply(lambda col: col.str.slice(0, col.str.rfind(".")))

以上方法均基于Pandas的向量化操作,避免了Python级别的循环,在处理大数据集时,速度和内存占用会有显著优化。

内容的提问来源于stack exchange,提问作者CatDad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:20:38