2015-09-16 16 views
7

Ho un dataframe di panda di python df con molte righe. Da quelle file, voglio dividere e utilizzare solo le righe che contengono la parola "palla" nella colonna "corpo". Per fare questo, posso fare:Filtraggio delle righe del dataframe di panda contenenti str

df[df['body'].str.contains('ball')]

Il problema è, io voglio che sia case insensitive, il che significa che se la parola palla o si presentò, io voglio quelli pure. Un modo per fare una ricerca senza distinzione tra maiuscole e minuscole consiste nel trasformare la stringa in minuscolo e quindi cercare in quella direzione. Mi sto chiedendo come fare per farlo. Ho provato

df[df['body'].str.lower().contains('ball')]

Ma questo non funziona. Non sono sicuro se dovrei usare una funzione lambda su questo o qualcosa del genere.

risposta

15

Si potrebbe usare sia .str di nuovo per ottenere l'accesso ai metodi di stringa, o (meglio, secondo me) utilizzare case=False per garantire tra maiuscole e minuscole:

>>> df = pd.DataFrame({"body": ["ball", "red BALL", "round sphere"]}) 
>>> df[df["body"].str.contains("ball")] 
    body 
0 ball 
>>> df[df["body"].str.lower().str.contains("ball")] 
     body 
0  ball 
1 red BALL 
>>> df[df["body"].str.contains("ball", case=False)] 
     body 
0  ball 
1 red BALL 
>>> df[df["body"].str.contains("ball", case=True)] 
    body 
0 ball 

(Si noti che se si sta andando a fare le assegnazioni , è meglio usare df.loc, per evitare il temuto SettingWithCopyWarning, ma se stiamo solo selezionando qui non importa.)

(Nota n. 2: suppongo che davvero non ho bisogno di specificare 'round 'lì ..)

+0

A mazing. Ero vicino a concatenare eventi 'str'. Non sapevo che 'str.contains' ha un'opzione' case = False'. È fantastico. Ancora un seguito: ho ricevuto il temuto SettingWithCopy Warning a cui vi siete riferiti. Ti dispiacerebbe elaborarlo un po '? Il mio obiettivo è creare un nuovo dataframe delle sole righe contenenti "ball" – David

+1

Questa è una storia un po 'troppo lunga da scrivere qui nei commenti. Puoi leggere [questa sezione] (http://pandas-docs.github.io/pandas-docs-travis/indexing.html?highlight=settingwithcopywarning#returning-a-view-versus-a-copy) della documentazione per una spiegazione. – DSM

Problemi correlati