Pensavo che sarebbe stato semplice ma aveva qualche problema nel rintracciare un modo elegante per cercare contemporaneamente tutte le colonne in un dataframe per una corrispondenza di stringa parziale. Fondamentalmente come potrei applicare df['col1'].str.contains('^')
a un intero dataframe in una sola volta e filtrare verso il basso su tutte le righe che contengono record contenenti la corrispondenza?Ricerca stringa in tutte le colonne e filtro di Pandas DataFrame
risposta
Il metodo Series.str.contains
prevede un modello regex (predefinito), non una stringa letterale. Pertanto str.contains("^")
corrisponde all'inizio di qualsiasi stringa. Poiché ogni stringa ha un inizio, tutto corrisponde. Utilizzare invece str.contains("\^")
per abbinare il letterale ^
carattere.
di controllare ogni colonna, è possibile utilizzare for col in df
per scorrere i nomi delle colonne, e quindi chiamare str.contains
su ogni colonna:
mask = np.column_stack([df[col].str.contains(r"\^", na=False) for col in df])
df.loc[mask.any(axis=1)]
In alternativa, si potrebbe passare regex=False
-str.contains
per fare il test utilizzare il Python Operatore in
; ma (in generale) l'uso della regex è più veloce.
Ehi @unutbu, domanda per te . Perché usi 'np.column_stack 'quando puoi usare' pd.DataFrame (...). Transpose() '? – propjk007
Quando 'mask' è un array NumPy booleano,' df.loc [mask] ' righe selezionate dove' mask' è True. Se 'mask' è un DataFrame, tuttavia, ' df.loc [mask] 'seleziona le righe da' df' il cui valore * index * corrisponde al valore di indice in 'mask' che corrisponde a un valore True. Questo allineamento degli indici è meraviglioso quando ne hai bisogno, ma rallenta le prestazioni quando non lo fai. Quindi, in breve, se non hai bisogno dell'indice , usa una matrice NumPy invece di un DataFrame. Inoltre, creando DataFrame è molto più lento della creazione dell'array NumPy quindi non c'è alcun vantaggio nell'uso di 'pd.DataFrame ([...]). T' qui. – unutbu
Non ho pensato all'effetto prestazionale dell'approccio DataFrame. Era, più o meno, circa l'aggiunta di un altro modulo (numpy) e pensavo che usare le funzioni nella stessa libreria (panda) sarebbe stato meglio. Vedo che la tua metodologia a lungo termine è migliore. Grazie a @unutbu! – propjk007
Prova con:
df.apply(lambda row: row.astype(str).str.contains('TEST').any(), axis=1)
- 1. Moltiplica tutte le colonne in un dataframe di Pandas insieme
- 2. Pandas dataframe: applicare la funzione a tutte le colonne
- 3. Come si calcola la correlazione tra tutte le colonne in un DataFrame e tutte le colonne in un altro DataFrame?
- 4. Pandas 'describe' non restituisce il riepilogo di tutte le colonne
- 5. Combinare Pandas dataframe DateTime Colonne
- 6. Somma tutte le colonne con una ricerca di nomi con caratteri jolly usando Python Pandas
- 7. Come groupby un dataframe in Pandas e mantenere Colonne
- 8. Convertire Pandas dataframe stringa csv
- 9. colonne Pandas Selezionare dataframe utilizzando booleane
- 10. Pandas: somma dataframe righe per le varie colonne
- 11. Ricerca Pandas, mappatura di una colonna in un dataframe a un'altra in un dataframe diverso
- 12. Imputa l'intero DataFrame (tutte le colonne) usando Scikit-learn (sklearn) senza scorrere le colonne
- 13. Recupera DataFrame di tutte le colonne tranne una specificata
- 14. Pandas, DataFrame: divisione di una colonna in più colonne
- 15. Dividere le stringhe in tuple in colonne, in Pandas
- 16. Dati di output da tutte le colonne in un dataframe nei panda
- 17. indicizzazione e colonne di dati in Pandas/
- 18. Pandas MultiIndex: Dividere tutte le colonne da una colonna
- 19. Concatenazione colonna Pandas DataFrame
- 20. Combinare colonne in un DataFrame di Pandas in una colonna di elenchi in un DataFrame
- 21. Conservazione dell'ordine delle colonne in Python Pandas DataFrame
- 22. Sommare i valori delle colonne in Pandas DataFrame
- 23. colonne drop di dataframe pandas per numero di nan
- 24. Slice Pandas DataFrame per riga
- 25. Creare più colonne in Pandas Dataframe da una funzione
- 26. Pandas DataFrame funzione di aggregazione utilizzando più colonne
- 27. Transforming Pandas Dataframe
- 28. pandas DataFrame diagonale
- 29. Pandas: Combina corda e int colonne
- 30. Pandas ricerca basata sul valore
Volete cercare un'intera dataframe piuttosto che solo una colonna specifica? – EdChum
il metodo 'str.contains' è valido solo per la serie, quindi dovresti fare qualcosa come' per col in df: df [col] .str.contains ('^') ' – EdChum