Používání Regex operátorů v Pythonu / Pandy hraběti zápisu dat podmíněně

hlasů
1

Pomocí knihovny pandy v Pythonu, mám zařízení v mém kódu, který vypadá takto:

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

Co se snažím udělat, je zde spočítat počet položek v A1sloupci datového rámce df, které nemají obsahovat libovolnou kombinaci písmen A, T, C a G.

Tyto výrazy by měly být považovány BadData:

  • 123
  • <% * &
  • foo

Ale tyto výrazy by neměl:

  • A
  • ATCG
  • GATCATTA

Moje otázka : Jak bych mohl použít regex znaky zahrnovat položky jako „ A pple“ nebo „ G olfing“ v BadData?

Mohl bych dohromady podmínky řetězové třeba takto:

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

Ale tady jsem čelí potíže: musím definovat každý znak, který porušuje podmínku? To se zdá být nemotorný, a jsem si jist, že je více elegantní způsob.

Položena 08/11/2018 v 00:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Můžeš použít:

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

Který dělá jistý, že to oba starty (regex ^) a konce (regex $) s dopisem v ACTGa obsahuje pouze jeden nebo více z těchto znaků.

Chcete-li získat len, stačí sečíst Falsehodnoty:

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

Což odpovídá:

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

Ale IMO příjemnější číst.

Například:

>>> 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
Odpovězeno 08/11/2018 v 00:08
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more