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

如何对pandas DataFrame列表内各元素按列值条件筛选数据

实现方案

你只需要对每个DataFrame加布尔索引筛选即可,有两种常用实现方式:

方案1:读取文件时直接筛选(推荐,内存效率更高)

直接修改原有循环的append逻辑,在读取文件、提取目标列后立刻做行筛选,代码如下:

import os
import pandas as pd

os.chdir('C:/Users/OneDrive/Desktop/py2convers/psychoflicker-master/src/data/TESTPILOTA1/pythonProject1/Data')
filelist = os.listdir()
filelist = sorted(filelist, key=lambda x: int(os.path.splitext(x)[0]))
print(filelist)

interest = []
for file2 in filelist:
    if file2.endswith('.txt'):
        df3 = pd.read_table(file2)
        # 提取目标列后,仅保留Trial Condition为Bilateral-Left的行,末尾NaN行也会被自动过滤
        filtered_df = df3[['Trial Condition', 'Response']][df3['Trial Condition'] == 'Bilateral-Left']
        interest.append(filtered_df)

# 可通过如下代码验证筛选结果
print(interest[0])

方案2:对已生成的全量列表二次筛选

如果你已经运行原有代码生成了存储全量数据的interest列表,不想重新读取文件,可以直接遍历列表做筛选:

  • 普通for循环写法
interest_filtered = []
for df in interest:
    filtered_df = df[df['Trial Condition'] == 'Bilateral-Left']
    interest_filtered.append(filtered_df)
  • 更简洁的列表推导式写法
interest_filtered = [df[df['Trial Condition'] == 'Bilateral-Left'] for df in interest]
注意事项
  • 筛选条件里的Bilateral-Left要和列内实际值完全匹配,注意大小写、前后隐形空格,如果存在格式不一致问题,可以先做列值清洗再筛选:df['Trial Condition'] = df['Trial Condition'].str.strip()
  • 上述筛选逻辑会自动排除Trial Condition为Bilateral-Right的行,以及末尾值为NaN的空行,不需要额外调用dropna()方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:36:29