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']]]有三个核心问题:
- 语法错误:Pandas布尔索引中不能用
AND,必须用&;而且Python里逻辑与是小写的and,但这里因为是Series的布尔运算,必须用&,同时每个条件要加括号(避免运算符优先级问题)。 - 逻辑错误:一个
Name值不可能同时等于PTEN和IRF2,你需要的是“或”的逻辑,也就是Name是两者之一。 - 索引方式错误:你嵌套的索引写法不符合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
相关产品推荐
相关产品推荐

