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

Pandas提取CSV子集失败:IRF2与PTEN的DataFrame筛选问题修正

修正Pandas筛选DataFrame子集的代码问题

首先先明确你的数据情况,原始CSV内容是这样的:

Name,SampleProbe
IRF2,231.14
IRF2,340.19
IRF2,139.57
PTEN,115.57
PTEN,240.4
PTEN,117.92
PRKACB,180.02
PRKACB,396.13
PRKACB,186.9

你的需求是提取Name列为IRF2和PTEN的所有行,但当前的代码有几个逻辑和语法错误,我来一步步帮你修正:

你的代码问题分析

这段代码df2 = df[[df['Name' == 'PTEN' AND 'Name' == 'IRF2']['SampleProbe']]]有三个核心问题:

  1. 语法错误:Pandas布尔索引中不能用AND,必须用&;而且Python里逻辑与是小写的and,但这里因为是Series的布尔运算,必须用&,同时每个条件要加括号(避免运算符优先级问题)。
  2. 逻辑错误:一个Name值不可能同时等于PTEN和IRF2,你需要的是“或”的逻辑,也就是Name是两者之一。
  3. 索引方式错误:你嵌套的索引写法不符合Pandas的筛选逻辑,正确的做法是先筛选符合条件的行,再保留需要的列(或者直接保留所有列)。

正确的代码写法

这里给你两种简洁且正确的实现方式:

方法1:用isin()(推荐,适合多值筛选)

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

plt.rcParams['figure.figsize'] = (20.0, 10.0)
plt.rcParams['font.family'] = "serif"

df = pd.read_csv('data.txt')
# 筛选Name在指定列表中的行
df2 = df[df['Name'].isin(['IRF2', 'PTEN'])]
# 如果只需要显示Name和SampleProbe列,也可以明确指定:df2 = df[df['Name'].isin(['IRF2', 'PTEN'])][['Name', 'SampleProbe']]
print(df2)

方法2:用|(或运算符)实现多条件筛选

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

plt.rcParams['figure.figsize'] = (20.0, 10.0)
plt.rcParams['font.family'] = "serif"

df = pd.read_csv('data.txt')
# 注意每个条件要加括号,用|代替or
df2 = df[(df['Name'] == 'IRF2') | (df['Name'] == 'PTEN')]
print(df2)

运行后的预期结果

执行上述代码后,df2的输出就是你想要的:

Name  SampleProbe
0   IRF2       231.14
1   IRF2       340.19
2   IRF2       139.57
3   PTEN       115.57
4   PTEN       240.40
5   PTEN       117.92

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:05:32