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

Pandas处理路由器Show ARP输出列异常及自然排序实现求助

解决方案

问题1:字符串/列表生成DataFrame列数异常

路由器Show ARP的输出是多空格分隔的结构化文本,直接转DataFrame会因分隔符处理不当导致列数错误。解决思路是先统一分割每行数据:

import pandas as pd
import re

# 示例:arp_lines为读取txt文件后得到的每行内容列表(需跳过无关表头)
arp_lines = [
    "192.168.1.1   00:11:22:33:44:55  VLAN1  dynamic  Ethernet0/0  00:11:22:33:44:55",
    "192.168.1.10  AA:BB:CC:DD:EE:FF  VLAN10 dynamic  Ethernet0/1  AA:BB:CC:DD:EE:FF"
]

# 用正则分割任意数量的空格,过滤空字符串
processed_data = [re.split(r'\s+', line.strip()) for line in arp_lines]

# 指定列名生成DataFrame(根据实际ARP输出列调整)
df = pd.DataFrame(processed_data, columns=["IP", "MAC", "VLAN", "Type", "Interface", "HW_MAC"])

问题2:读取CSV后用自然排序

使用natsort库的natsorted函数对指定列值排序,再重新索引DataFrame:

from natsort import natsorted

# 假设已通过pd.read_csv读入DataFrame df
sort_column = "IP"  # 可替换为MAC/VLAN

# 方法1:通过索引重排实现自然排序
sorted_df = df.loc[natsorted(df.index, key=lambda x: df[sort_column].iloc[x])]

# 方法2(Pandas 1.1.0+):用sort_values的key参数更简洁
sorted_df = df.sort_values(by=sort_column, key=lambda x: natsorted(x))

问题3:输出Excel报错No engine for filetype csv

该错误是因为调用to_excel()时文件名后缀为.csv(混淆了文件格式),需满足两个条件:

  1. 文件名后缀改为.xlsx(或.xls)
  2. 安装Excel读写引擎(如openpyxl)
# 先安装依赖
# pip install openpyxl

# 输出Excel文件
sorted_df.to_excel("arp_sorted.xlsx", index=False, engine="openpyxl")

# 若输出CSV,直接使用to_csv即可,无需指定引擎
sorted_df.to_csv("arp_sorted.csv", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:52:20