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

如何筛选pandas DataFrame中指定列值属于给定数组的行,无需嵌套for循环且无NaN

问题原因分析

你现有代码出现NaN的核心原因是初始化空结果表的方式错误:用集合{'Name', 'Type', 'id'}直接创建DataFrame时,pandas会将集合元素逐行作为第一列(默认列名为0)的值,和后续拼接的Name/Type/id列结构不匹配,才会出现大量空值。此外双层for循环是完全不必要的写法,pandas内置的向量化操作可以更高效完成筛选需求。

最优实现方案

直接使用isin()方法做布尔索引筛选,一行代码即可得到预期结果:

import pandas as pd
import numpy as np

# 原始数据
array_id = np.array([2,4,7])
df = pd.DataFrame({'Name': ['Station', 'Sensor', 'Station', 'Sensor', 
                            'Sensor', 'Sensor', 'Sensor'], 
                   'Type': ['analog', 'dig', 'analog', 'analog', 
                            'analog', 'analog', 'dig'],
                   'id': [1, 2, 3, 4, 5, 6, 7]})

# 核心筛选逻辑
df_select = df[df['id'].isin(array_id)].reset_index(drop=True)

执行后输出df_select即可得到你预期的结果:

Name    Type  id
0  Sensor     dig   2
1  Sensor  analog   4
2  Sensor     dig   7

reset_index(drop=True)是可选操作,作用是重置结果表的行索引为连续的整数,不需要可以直接删掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:05