【问题标题】:Check for invalid observation检查无效观察
【发布时间】:2021-02-28 12:04:24
【问题描述】:

我需要检查并删除那些在表位序列(DF 中的列)中包含任何非特异性氨基酸字母(即 B、J、X 或 Z)的观察结果。

表位序列是数据框中的一列,其值类似于下面给出的示例。我需要检查该序列是否包含字母 B、J、X、Z,如果是,则删除所有相应的记录。

表位序列:

ACIIERKNRGELEYT
CDLNENQTWVDNGC
CASQEFDYEFDDVNE
DDDSYTTKRKF

我拥有的当前代码正在单独检查每个代码,这意味着编写 4 行代码。有没有更好的方法来做到这一点,即使用 OR 运算符在一行中的所有 4 行代码?如果是,怎么做?

当前代码:

final_df.drop(final_df[final_df['epit_seq'].str.contains('B')].index, inplace=True)
final_df.drop(final_df[final_df['epit_seq'].str.contains('J')].index, inplace=True)
final_df.drop(final_df[final_df['epit_seq'].str.contains('X')].index, inplace=True)
final_df.drop(final_df[final_df['epit_seq'].str.contains('Z')].index, inplace=True)

【问题讨论】:

  • 是的,当前代码确实有效。 final_df 是我创建的临时数据框的名称。

标签: python data-preprocessing


【解决方案1】:

由于contains默认允许正则表达式,你可以如下缩短到一行。

ignore = '|'.join(['B', 'J', 'X', 'A']) # use regular expression with or on substrings
final_df.drop(final_df[final_df['epit_seq'].str.contains(ignore)].index, inplace=True)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 2019-06-11
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多