Χρησιμοποιώντας Regex φορείς εκμετάλλευσης σε Python / Πάντα να Count δεδομένων συμμετοχές υπό όρους

ψήφοι
1

Χρήση της βιβλιοθήκης pandas σε Python, έχω μια συσκευή με κωδικό μου που μοιάζει με αυτό:

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

Αυτό που προσπαθώ να κάνω εδώ είναι να μετρήσει τον αριθμό των εγγραφών στην A1στήλη του dataframe dfπου δεν περιέχουν οποιονδήποτε συνδυασμό των γραμμάτων A, T, C, και Γ

Αυτές οι εκφράσεις πρέπει να υπολογίζεται ως BadData:

  • 123
  • <% * &
  • foo

Αλλά αυτές οι εκφράσεις δεν θα πρέπει να:

  • ΕΝΑ
  • ATCG
  • GATCATTA

Η ερώτησή μου : πώς θα μπορούσε να χρησιμοποιήσει regex χαρακτήρες για να συμπεριλάβει τις καταχωρήσεις όπως το « 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)])

Αλλά εδώ έχω αντιμετωπίσει μια δυσκολία: έχω να καθορίσει κάθε χαρακτήρα που παραβιάζει την κατάσταση; Αυτό φαίνεται αδέξια, και είμαι βέβαιος ότι υπάρχει ένα πιο κομψό τρόπο.

Δημοσιεύθηκε 08/11/2018 στις 00:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Μπορείς να χρησιμοποιήσεις:

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

Γεγονός που καθιστά βεβαιωθείτε ότι και οι δύο εκκινήσεις (το regex ^) και τα άκρα (το regex $) με ένα γράμμα σε 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
Απαντήθηκε 08/11/2018 στις 00:08
πηγή χρήστη

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