Mi chiedo se esiste un modo più efficiente di utilizzare la funzione str.contains() in Panda per cercare due stringhe parziali allo stesso tempo. Voglio cercare una data colonna in un dataframe per i dati che contengono "nt" o "nv". In questo momento, il mio codice è simile al seguente:Utilizzo di str.contains() nei panda con i dataframes
df[df['Behavior'].str.contains("nt", na=False)]
df[df['Behavior'].str.contains("nv", na=False)]
E quindi appendo un risultato a un altro. Quello che mi piacerebbe fare è usare una singola riga di codice per cercare qualsiasi dato che includa "nt" OR "nv" OR "nf". Ho giocato con alcuni modi che pensavo dovessero funzionare, tra cui solo attaccare una pipe tra i termini, ma tutti questi si traducono in errori. Ho controllato la documentazione, ma non la vedo come un'opzione. Ottengo errori come questo:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-113-1d11e906812c> in <module>()
3
4
----> 5 soctol = f_recs[f_recs['Behavior'].str.contains("nt"|"nv", na=False)]
6 soctol
TypeError: unsupported operand type(s) for |: 'str' and 'str'
C'è un modo veloce per fare questo? Grazie per l'aiuto, sono un principiante, ma adoro i panda per i conflitti di dati.
grazie una tale bellezza! . attenzione però, non ci deve essere spazio tra la pipe e i termini di ricerca! – jaknap32
@ jaknap32: Se usi il modificatore '(? X)', puoi aggiungere spazi dove vuoi - '" (? X) nt | nv "' - (ma se hai degli spazi significativi nel pattern, dovrai sfuggirle, così come '#' char). Vedi [Python 're.X' docs] (https://docs.python.org/2/library/re.html#re.VERBOSE). Comunque, 'n [tv]' è una regex migliore di 'nt | nv'. –
+1 per l'espressione "na = False". I miei dati hanno delle lacune e la mia stringa contiene la funzione non funzionerà senza di essa. –