【问题标题】:Pandas Keyerror when specifying loc row labels using a loop使用循环指定 loc 行标签时的 Pandas Keyerror
【发布时间】:2021-01-11 18:30:34
【问题描述】:

我使用 pandas 从 txt 文件中加载了以下数据框 Positive Samples Dataframe

这个阳性样本数据框有一个名为 Gene Set 的列,它基本上是一个基因列表。当我运行postive_samples["Gene Set"] 时,我得到以下输出

['YAL004W', 'YLL024C'] ['YAL005C', 'YLL024C'] ['YAL005C', 'YMR006C'] ['YAL005C', 'YOL090W'] ['YAL009W', 'YBR074W'] ['YAL009W', 'YER162C'] ['YAL009W', 'YHL024W'] ['YAL009W', 'YJL187C'] ['YAL009W', 'YKR003W']

我还有另一个名为 new_expression_df New Expression Dataframe 的数据框,它以 positive_samples["Gene Set"] 列作为其索引。

所以我想要做的是获取存储在 postive_samples["Gene Set"] 中的值,并使用循环在 new_expression_df 索引中使用 loc 定位它们。

samples_column_list= ["GSM144760","GSM144761","GSM144762","GSM144763","GSM144764"]

for gene_class_column in postive_samples[['Gene Set']]:
  #Select column contents by column name using [] operator
    geneSeriesObj = postive_samples[gene_class_column]
    gene_pairs = geneSeriesObj.values

#get gene pairs and locate their expression in the given samples    
for gene_pair in gene_pairs:
  new_expression_df.loc[gene_pair,samples_column_list]

当我尝试使用循环执行此操作时,我在迭代开始时遇到一个关键错误,理想情况下,我希望将每个基因集作为一个列表,使用其索引将其值定位在另一个数据框中。

但是,当我像下面那样插入每个集合而不使用循环时,它对于相同的值工作得很好,我得到了一个关键错误,那么我在这里做错了什么?

new_expression_df.loc[['YAL002W','YBL001C'],samples_column_list]

我想从另一个存储在列表中的数据框列值中动态放置 loc 函数的行参数。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你能在第二个 for 循环之前打印gene_pairs 吗?

    【讨论】:

    • 当我打印gene_pairs 时,我得到了上面突出显示的相同输出,如下面的每次迭代。所以每次迭代输出一个列表 ['YAL004W', 'YLL024C'] ['YAL005C', 'YLL024C'] ['YAL005C', 'YMR006C'] ['YAL005C', 'YOL090W'] ['YAL009W', 'YBR074W' ] ['YAL009W', 'YER162C'] ['YAL009W', 'YHL024W'] ['YAL009W', 'YJL187C'] ['YAL009W', 'YKR003W']
    • 你能告诉我下面的输出吗-for gene_pair in gene_pairs: print(gene_pair) new_expression_df.loc[gene_pair,samples_column_list]
    • 它的作用是打印每一对。 ['YAL004W', 'YLL024C'] 是 print(gene_pair) 的一个输出。基因对是我上面给出的数组/列表的 2 个元素。因此,如果我把它放在一个循环中,它会像我上面评论的那样输出所有其他对,但我想做的是,将每个输出迭代放在 loc 函数中并执行它而不会出现关键错误
    • 尝试使用 .at 而不是 .loc。您也可以将值传递给打印方法吗? for gene_pair in gene_pairs: print(new_expression_df.loc[gene_pair,samples_column_list])
    • 我认为 .loc 比 .at 更好,因为我试图返回基于多个行和列的值,但我试了一下,如果它给了我一个类型错误我使用 .at 因为我给它一个列表输出仍然相同,即使我将它包装在打印语句中,我也会得到关键错误。我想知道的是,当我将所有值手动插入 .loc 函数时,它是如何在使用循环时出现关键错误但没有任何错误的?这没有任何意义?‍♂️。我实际上是在有或没有循环的情况下插入相同的值?
    猜你喜欢
    • 2020-10-03
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2021-01-26
    • 2019-09-16
    相关资源
    最近更新 更多