如何在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
相关产品推荐
相关产品推荐

