2017-05-10 23 views
1

上の行を削除します。 文字列を含む列の1つで、その列のすべての項目を特定の部分文字列で検索して、 "abc"と言い、部分文字列が存在する場合はその行を削除します。それ、どうやったら出来るの?それは簡単に聞こえるが、何とか私はこれに苦しんでいる。 部分文字列は常に最後の3文字です。 私は次のことを試してみました:ブールシリーズのキーはので、私はその中で値を変更しようとしたDATAFRAME インデックスPythonのパンダは、私は文字列と整数の列を持つデータフレームを持つ文字列条件

に一致するようにインデックスを再作成されます。私は

UserWarningを与える

df1 = df.drop(df[df.Hostname[-4:]== "abc"]) 

red = [c for c in df.Hostname[-4:] if c != 'abc'] 
:末尾に「ABC」を持たないすべての値を列とフィルタリング

KeyError例外(%のobjarr [マスク] '%が索引にないS')

は私が間違って何をしますか、私に

を与えますか?あなたの助けのための

ありがとう!

答えて

1

使用boolean indexingは、列Hostnameの(34最後の文字をチェックし、==から!=に条件を変更する必要がある場合はindexing with strを追加します。

df1 = df[df.Hostname.str[-4:] != "abc"] 

または多分:

df1 = df[df.Hostname.str[-3:] != "abc"] 

をサンプル:

df = pd.DataFrame({'Hostname':['k abc','abc','dd'], 
        'b':[1,2,3], 
        'c':[4,5,6]}) 
print (df) 
    Hostname b c 
0 k abc 1 4 
1  abc 2 5 
2  dd 3 6 

df1 = df[df.Hostname.str[-3:] != "abc"] 
print (df1) 
    Hostname b c 
2  dd 3 6 

またstr.endswithかの必要性チェックの最後の文字に動作します:

df1 = df[~df.Hostname.str[-4:].str.contains('abc')] 
print (df1) 
    Hostname b c 
2  dd 3 6 
abc場合は、最後の4つの文字で確認した後、行最初の抽出値を削除し str.containsを使用する必要がある場合は

df1 = df[~df.Hostname.str.endswith("abc")] 
print (df1) 
    Hostname b c 
2  dd 3 6 

EDITを

EDIT1:

デフォルトのインデックスの場合は、追加reset_index - インデックスの値が0,1,2,...あるので、Pythonのカウントは、0を形成:

df1 = df[df.Hostname.str[-3:] != "abc"].reset_index(drop=True) 
+0

素晴らしいです!あなたの簡単な例を返信してくれてありがとう。今分かります! – Burray

+0

しかし、文字列の数値に問題がある可能性があります。問題がある場合は 'df.Hostname = df.Hostname.astype(str)'が必要かもしれません。 – jezrael

+0

編集した回答を確認してください。 – jezrael

関連する問題