Filtering dataframe based on that if string is made from specific letters

Viewed 129

So i have Dataframe that look's like this

note i put diffrent letters in * * for you to see easy

      id                                                              genome
0    639  ATGTTTGTTTTT*Y*TTGTTTTATATGTTTGTTTTTCTTGTTTTATATGTTTGTTTTTCTTGTTTTAT
1    640  ATGTTTGTTTTT*J*TTGTTTTATATGTTTGTTTTTCTTGTTTTATATGTTTGTTTTTCTTGTTTTAT
2    641  ATGTTTGTTTTTCTTGTTTTATATGTTTGTTTTTCTTGTTTTATATGTTTGTTTTTCTTGTTTTAT
3    642  ATGTTTGTTTTTCTTGTTTTATATGTTTGTTTTTCTTGTTTTATATGTTTGTTTTTCTTGTTTTAT

I want to filter it by string. Basically if string contains any other letter than A, C, T, G, N leave this row in dataframe else just delete it.

I was tying this

df = df[~df['genome'].str.contains('[^ACTGN]')]

and this

df = df[df['genome'].str.match('^[ACTGN]+$')]

but nothings seams to work, all i get is all rows are true or false despite having diffrent letters

1 Answers

It looks like your strings have leading/trailing spaces (look at those alignments in print out). So try:

df['genome'] = df['genome'].str.strip()
df = df[~df['genome'].str.contains('[^ACTGN]')]

Or you can chain them if you don't want to modify your genome column:

df = df[df[~df['genome'].str.strip().str.contains('[^ACTGN]')]
Related