2013-06-13 22 views
32

パンダにおけるデータフレームの「-が含まれていません」 reverse:そのセットの補数でデータフレームをフィルタリングします。例:!(df["col"].str.contains(word))の効果。 検索は、しかし、私は思ったんだけど、私はいくつかの検索を行ってきたと<code>df["col"].str.contains(word)</code>でデータフレームをフィルタリングする方法を見つけ出すことはできません

は、これは DataFrame方法を介して行うことができますか?

答えて

51

あなたは(ブールデータ用ではないような働き)反転(〜)演算子を使用することができます。

~df["col"].str.contains(word) 

は、正規表現を受け入れも含まれています...

+1

パーフェクト!私はSQLに精通しており、Pythonではそれが違っていると思っていました。「re.complies」の記事がたくさんありました。私は、検索をオーバーフィットのように見える、それはあなたが言うだけのようです。) – stites

+3

たぶん完全な例が参考になる: 'のDF [〜df.col.str.contains(ワード)]'除外行で、オリジナルデータフレームのコピーを返します。言葉にマッチする。 –

3

を私が取得しなければなりませんでした上記のAndyが推奨するコマンドを使用する前に、NULL値を取り除いてください。例:)(私はdropna()またはfillnaを使用してNULL値を処分した

TypeError: bad operand type for unary ~: 'float' 

:私は次のエラーを取得する

~df["second"].str.contains(word) 

df = pd.DataFrame(index = [0, 1, 2], columns=['first', 'second', 'third']) 
df.ix[:, 'first'] = 'myword' 
df.ix[0, 'second'] = 'myword' 
df.ix[2, 'second'] = 'myword' 
df.ix[1, 'third'] = 'myword' 
df 

    first second third 
0 myword myword NaN 
1 myword NaN  myword 
2 myword myword NaN 

は今のコマンドを実行していますまず問題なくコマンドを再試行しました。

+1

'〜df [" second "] .stat(str).str.contains(word)'を使って 'str'に強制的に変換することもできます。 https://stackoverflow.com/questions/43568760/pandas-droprows-where-column-contains –

17

私はここに別のStackOverflow threadから別の方法だ、と同様ではない(〜)記号とのトラブルを抱えていた。

df[df["col"].str.contains('this|that')==False] 
+0

これを組み合わせることはできますか? strcontains( 'this' | 'that')== Falseとdf ["col2"]。str.contains( 'foo' | 'bar')== True) 'df [df [" col1 " ?ありがとう! –

+0

はい、できます。構文はここで説明されていますhttps://stackoverflow.com/questions/22086116/how-do-you-filter-pandas-dataframes-by-multiple-columns –

+1

私はTypeError例外 '得る:のためのサポートされていないオペランドのタイプ(複数可)|: 'str'と 'str''、おそらくあなたは '' this' that''を意味しますか? –

関連する問題