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

基于Pandas的IP地址数值段缺口填充脚本实现咨询

实现思路

  • 先对原始DataFrame按START_IP_NUMBER升序排序,保证相邻行的IP段是按顺序排列的
  • 逐行遍历数据,对比当前行的START_IP_NUMBER和上一行的END_IP_NUMBER,判断是否存在数值缺口
  • 存在缺口时生成补全行,补全行的起止数值为缺口的起止值,同时将数值转换为对应的IP地址
  • 最终合并所有行得到补全后的结果

完整代码实现

import pandas as pd
import socket
import struct

# 定义数值转IP地址的工具函数
def num_to_ip(ip_num: int) -> str:
    return socket.inet_ntoa(struct.pack('!I', ip_num))

# 原始数据示例
data = {
    "START_IP_NUMBER": [16777216, 16777472, 16802816],
    "END_IP_NUMBER": [16777471, 16778239, 16802943],
    "START_IP_ADDRESS": ["1.0.0.0", "1.0.1.0", "1.0.100.0"],
    "END_IP_ADDRESS": ["1.0.0.255", "1.0.3.255", "1.0.100.127"]
}
df = pd.DataFrame(data)

# 第一步:按起始IP数值排序,重置索引
df = df.sort_values("START_IP_NUMBER").reset_index(drop=True)

processed_rows = []
prev_row = None

for _, curr_row in df.iterrows():
    if prev_row is not None:
        # 计算缺口的起止数值
        gap_start = prev_row["END_IP_NUMBER"] + 1
        gap_end = curr_row["START_IP_NUMBER"] - 1
        # 存在有效缺口则插入补全行
        if gap_start <= gap_end:
            processed_rows.append({
                "START_IP_NUMBER": gap_start,
                "END_IP_NUMBER": gap_end,
                "START_IP_ADDRESS": num_to_ip(gap_start),
                "END_IP_ADDRESS": num_to_ip(gap_end)
            })
    # 添加当前原始行
    processed_rows.append(curr_row.to_dict())
    prev_row = curr_row

# 生成最终结果
result_df = pd.DataFrame(processed_rows)
print(result_df)

输出验证

运行上述代码后,会在第二行和第三行之间插入补全行,结果如下:

START_IP_NUMBEREND_IP_NUMBERSTART_IP_ADDRESSEND_IP_ADDRESS
16777216167774711.0.0.01.0.0.255
16777472167782391.0.1.01.0.3.255
16778240168028151.0.4.01.0.99.255
16802816168029431.0.100.01.0.100.127

完全符合需求要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:09:02