Python 列表理解-基于变量选择列

Python 列表理解-基于变量选择列,python,string,filter,dataframe,list-comprehension,Python,String,Filter,Dataframe,List Comprehension,我的数据框架是ELA和Math列的汇编。我最终想删除一个主题的列集,因为我允许用户输入选择一个主题 我正在尝试使用列表理解来为数据框指定任何具有所选主题名称的列。一个细微差别是,ELA和数学选项中有两列应该保持不变,“熟练程度类别数学”和“熟练程度类别ELA” 关于如何使用列表理解来实现这一点的想法 输入: ELA Score Math Score ELA Goal Math Goal Proficiency ELA Proficiency Math 1

我的数据框架是ELA和Math列的汇编。我最终想删除一个主题的列集,因为我允许用户输入选择一个主题

我正在尝试使用列表理解来为数据框指定任何具有所选主题名称的列。一个细微差别是,ELA和数学选项中有两列应该保持不变,“熟练程度类别数学”和“熟练程度类别ELA”

关于如何使用列表理解来实现这一点的想法

输入:

    ELA Score  Math Score  ELA Goal   Math Goal   Proficiency ELA  Proficiency Math
        1          4          6           7              3                 5
输出:(主题选择=数学)

我当前的代码:

    col_list = df.columns
    subject_selection = 'Math'   ###User types in desired subject
    x = df['Proficiency Category Math']
    y = df['Proficiency Category ELA']
    df = [cols for cols in col_list if subject_selection in cols or cols == x or cols == y]
我收到的错误是:

    TypeError: invalid type comparison
您需要将列的名称与要包含的列的名称进行比较,就像您对
subject\u selection
所做的那样。换句话说,你做了
subject\u selection='Math'
,而不是
subject\u selection=df[['Math Score','Math Goal']]
。同样,你应该:

x = 'Proficiency Category Math'
y = 'Proficiency Category ELA'

您正在将列名与行中的值(int)进行比较。如果打印
col\u list
它看起来像什么?(是否有任何条目包含字符串'Math'?@jcplower col_list应该是我的数据框架中的列名列表。我想知道我的问题是否在于我正在使用列表理解过滤掉一个系列对象?只要
col\u list
看起来像这样,你的列表理解就可以了<代码>[“ELA分数”、“数学分数”、“ELA目标”、“数学目标”、“ELA熟练程度”、“数学熟练程度”]Ok!我意识到这个主要问题。在我解决了这个问题之后,我没有得到我想要的结果。我得到一个只返回x和y变量的列表。我的清单理解有问题吗@BrenBarn@krisko08:您需要提供一个独立的、可复制的示例来演示问题。
x = 'Proficiency Category Math'
y = 'Proficiency Category ELA'