Использование операторов регулярных выражений в Python / Pandas для условного подсчета записей - PullRequest
0 голосов
/ 08 ноября 2018

Используя библиотеку pandas в Python, в моем коде есть устройство, которое выглядит так:

BadData = len(df[df.A1.str.contains('A|T|C|G')==False])

Здесь я пытаюсь подсчитать количество записей в столбце A1 кадра данных df, которые не содержат никакой комбинации букв A, T, C, и Г.

Эти выражения должны учитываться как BadData:

  • 123
  • <% * & </li>
  • Foo

Но эти выражения не должны:

  • A
  • ATCG
  • GATCATTA

Мой вопрос : как я могу использовать символы регулярного выражения для включения таких записей, как " A pple" или " G olfing" в BadData?

Я мог бы связать воедино такие условия:

BadData = len(df[(df.A1.str.contains('A|T|C|G')==False) & (df.A1.str.contains('0|1|2|3')==TRUE)])

Но здесь я сталкиваюсь с трудностью: я должен определить каждого персонажа, который нарушает условие? Это кажется неуклюжим, и я уверен, что есть более элегантный способ.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать:

df['A1'].str.contains('^[ACTG]+$')

Это гарантирует, что оно начинается (регулярное выражение ^) и заканчивается (регулярное выражение $) буквой в ACTG и содержит только один или несколько из этих символов.

Чтобы получить len, вы можете просто сложить значения False:

bad_data = sum(~df['A1'].str.contains('^[ACTG]+$'))

Что эквивалентно:

bad_data = len(df[df.A1.str.contains('^[ACTG]+$')==False])

Но ИМО лучше читать.

Например:

>>> df
             A1
0         Apple
1       Golfing
2             A
3          ATTC
4          ACGT
5         AxTCG
6           foo
7             %
8  ACT Golf GTC
9           ACT


>>> df['A1'].str.contains('^[ACTG]+$')
0    False
1    False
2     True
3     True
4     True
5    False
6    False
7    False
8    False
9     True
Name: A1, dtype: bool

bad_data = sum(~df['A1'].str.contains('^[ACTG]+$'))
# 6
...