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(混淆了文件格式),需满足两个条件:
- 文件名后缀改为
.xlsx(或.xls) - 安装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
相关产品推荐
相关产品推荐

