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

过滤后的Pandas对象调用tolist()报错:DataFrame与Series类型混淆

数据对象

"FiveGigabitEthernet1/0/1": {
            "enabled": true,
            "data": "10",
            "voice": "20",
            "mode": "None",
            "serviceOutput": "None",
            "serviceInput": "None",
            "noMacro": "None",
            "template": "None",
            "tracking": "None",
            "speed": "None",
            "duplex": "None",
            "nonnegotiate": "None",
            "trusted": "None",
            "channelGroup": "None",
            "channelProtocol": "None",
            "ipAddress": "None",
            "ipMask": "None",
            "nativeVlan": "None",
            "allowedVlan": "None"
          },
"TenGigabitEthernet1/1/1": {
            "serviceOutput": "POLICY",
            "channelGroup": "1",
            "channelProtocol": "active",
            "nonnegotiate": true,
            "mode": "trunk",
            "allowedVlan": ["2", "10", "20", "30"],
            "nativeVlan": "2",
            "enabled": true,
            "data": "None",
            "voice": "None",
            "serviceInput": "None",
            "noMacro": "None",
            "template": "None",
            "tracking": "None",
            "speed": "None",
            "duplex": "None",
            "trusted": "None",
            "ipAddress": "None",
            "ipMask": "None"
         }

Pandas初始化代码

unique = r"GigabitEthernet0\/0|Bluetooth|AppGigabitEthernet|TwentyFiveGigE|FortyGigabitEthernet|Vlan"
ints = pd.DataFrame.from_dict(dataResult, orient="index")
ints.index.name = "port"
ints = ints.reset_index()
test = ints[(ints["mode"] != "trunk") & (~ints["port"].str.contains(unique,case=False,na=False))]
print(test)
问题原因及解决方法

调用.tolist()报错的原因

test是DataFrame类型,并非你误以为的Series。因为ints本身是包含多列的二维数据表,通过布尔索引过滤后,返回的结果依然保留所有列结构,仍是DataFrame。而.tolist()是Series的专属方法,直接在DataFrame上调用会触发类型错误。

获取port列Python列表的方法

要提取port列并转为原生列表,需先选中该列转为Series,再调用列表转换方法,三种常用实现方式:

  1. 选中列后调用.tolist():
port_list = test["port"].tolist()
  1. 选中列后调用.values.tolist():
port_list = test["port"].values.tolist()
  1. 使用Pandas推荐的.to_list()方法(功能与.tolist()一致):
port_list = test["port"].to_list()

针对你的数据,以上方法最终都会得到结果:['FiveGigabitEthernet1/0/1']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:55:18