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

如何在Pandas中批量筛选指定行及选择多行创建新DataFrame?

Pandas 数据筛选常见问题解答

嘿,我来帮你搞定这两个Pandas的实用问题,都是日常处理DataFrame时经常遇到的场景,咱们一步步说:

问题1:如何从某一列选择多行数据,创建新的DataFrame?

其实分两种常见场景,对应不同的实现方式:

  • 按行索引/位置选择:如果你知道要选的行的索引标签或者位置序号,可以直接用loc(标签索引)或iloc(位置索引):

    # 假设要选索引标签为0、2、5的行
    new_df = df.loc[[0, 2, 5]]
    
    # 或者按位置序号(从0开始计数)选第1、3、4行
    new_df = df.iloc[[1, 3, 4]]
    
  • 按列的条件筛选多行:如果是基于某列的条件(比如值在某个范围内、等于特定值集合),可以用布尔索引。比如要选'score'列大于80的所有行:

    new_df = df[df['score'] > 80]
    

    如果是选某列值属于多个指定内容的行,直接看问题2的方法就行~

问题2:批量筛选多个location值对应的行

你之前的代码出错,是因为逻辑运算符的使用方式不对:&需要两边都是布尔类型的Series,而你直接把字符串用&连接,Python无法识别这种逻辑。其实Pandas提供了更简洁的isin()方法来处理这种批量匹配的需求,一步就能搞定:

方法1:使用isin()(最常用)

先定义你要保留的location列表,然后用isin()生成布尔索引筛选行:

# 定义目标location集合
target_locations = ['Aberdeen', 'Glasgow', 'London']
# 筛选出location在目标列表中的行
x = df[df['location'].isin(target_locations)]

如果想要反向筛选(剔除这些location的行),只需要在布尔索引前加~(取反):

x = df[~df['location'].isin(target_locations)]

方法2:使用query()(更简洁的语法)

如果你喜欢更接近自然语言的写法,可以用query()方法:

x = df.query("location in ['Aberdeen', 'Glasgow', 'London']")

这种写法在筛选条件复杂时可读性更高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:15:01