【问题标题】:Select a column in andas and filter rows by strings在andas中选择一列并按字符串过滤行
【发布时间】:2021-10-18 08:51:41
【问题描述】:

我正在尝试运行 RNA 速度分析,并正在使用我的 Seurat 元数据。我正在尝试关注 this tutorial 并拥有以下单元格 ID 数据集:

Cell IDs: columns labelled x, y, z

我想根据字符串包含的内容从 z 列中选择单元 ID:

cellID_obs_WT3 = cellID_obs[cellID_obs[z].str.contains("221929_WT3:")]
cellID_obs_WT4 = cellID_obs[cellID_obs[z].str.contains("222863_WT4:")]
cellID_obs_KO4 = cellID_obs[cellID_obs[z].str.contains("222862_KO4:")]
cellID_obs_KO5 = cellID_obs[cellID_obs[z].str.contains("222864_KO5:")]

当我尝试上面的代码时,我不断收到错误

NameError                                 Traceback (most recent call last)
/tmp/ipykernel_2963/94098105.py in <module>
----> 1 cellID_obs[z]

NameError: name 'z' is not defined

在 z 周围添加引号会选择整个数据集。有谁知道该怎么做?

【问题讨论】:

  • 试试 cellID_obs[cellID_obs['z'], z in quotes
  • 或者试试cellID_obs[cellID_obs.z.str.contains("221929_WT3:")]

标签: python-3.x pandas string bioinformatics seurat


【解决方案1】:

抛出错误“name 'z' is not defined”,因为您尝试访问名为 z 的变量,该变量不存在。您想要的是访问名为 z 的列,因此引号是必需的。在 pandas 中,通常可以通过 dataFrame["nameOfColumn"] 或 dataFrame.nameOfColumn 访问列。在您的情况下,这将是 cellID_obs["z"] 或 cellID_obs.z

经过简短的测试,查询的其余部分应该可以正常工作。我不完全确定,您所说的“选择整个数据集”是什么意思

【讨论】:

  • 我有三列,“x”、“y”、“z”。当我运行 cellID_obs[“z”] 时,它不会只读取“z”,而是选择所有三列。我放弃了尝试运行此代码并手动进入 excel
【解决方案2】:

如果您仍在寻找答案,我会尝试打印 cellID_obs.columns 以找到您可以选择的列 ID。如果您不小心进行了多索引或类似的事情,它可能会提供信息。然后,您可以将它为 z 显示的任何值复制到上面的变量 z 中。除此之外,我认为您的语法没有任何问题。

【讨论】:

  • 如果需要,将来会尝试 - 我只是手动创建了一个包含我需要的列的新 csv。
猜你喜欢
  • 2013-03-24
  • 2021-06-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多