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

如何使用Pandas对含IP地址列的CSV文件正确排序?

按IP地址正确排序CSV数据的解决方法

针对你遇到的IP排序问题,这里提供两种可靠的pandas解决方案,确保IP按四段十进制规则升序排列,同时同步MAC、ID等关联数据:

方法一:使用ipaddress模块(推荐)

利用Python内置的ipaddress模块将IP字符串转换为IPv4对象,这类对象会自动按IP规则比较大小,完美解决排序问题:

import pandas as pd
import ipaddress

# 读取CSV文件
df = pd.read_csv("your_input.csv")

# 按IP地址列排序,key参数通过apply逐个转换IP为IPv4对象
df_sorted = df.sort_values(by="IP Address", key=lambda x: x.apply(ipaddress.IPv4Address))

# 保存排序后的结果(去掉index避免生成多余列)
df_sorted.to_csv("sorted_output.csv", index=False)

你之前直接用key=ipaddress.IPv4Address报错,是因为sort_values的key参数需要接收整个Series并返回排序键,而ipaddress.IPv4Address只能处理单个字符串,所以需要用lambda结合apply来逐个转换每个IP值。

方法二:拆分IP为四段整数排序

如果不想依赖ipaddress模块,可以把IP拆分成四个整数列,按多列排序:

import pandas as pd

df = pd.read_csv("your_input.csv")

# 将IP地址按`.`拆分,生成四个整数列
df[["ip_segment1", "ip_segment2", "ip_segment3", "ip_segment4"]] = df["IP Address"].str.split(".", expand=True).astype(int)

# 按四段整数依次升序排序
df_sorted = df.sort_values(by=["ip_segment1", "ip_segment2", "ip_segment3", "ip_segment4"])

# 删除临时生成的拆分列
df_sorted = df_sorted.drop(columns=["ip_segment1", "ip_segment2", "ip_segment3", "ip_segment4"])

# 保存结果
df_sorted.to_csv("sorted_output.csv", index=False)

为什么之前的方法失效?

  • 直接用sort_values()无key参数:会把IP当作普通字符串按字典序排序,导致10.10.10.112排在10.10.10.17前面(字符串比较中"112"的第二个字符'1'小于"17"的'7')。
  • 用sorted()单独排IP列表:只能得到排序后的IP序列,无法同步关联的MAC、ID数据,因为sorted不处理DataFrame的行关联关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:57:40