2017-01-20 381 views
3

我需要類似在熊貓中選擇行不包含特定字符

.str.startswith() 
.str.endswith() 

但對於一個字符串的中間部分東西。

例如,給定以下pd.DataFrame

 str_name 
    0 aaabaa 
    1 aabbcb 
    2 baabba 
    3 aacbba 
    4 baccaa 
    5 ababaa 

我需要拋出行1,3和4包含(至少一個)字母「c」的。
特定字母('c')的位置未知。
任務是除去不包含至少一個特定字母

回答

3

你想df['string_column'].str.contains('c')

>>> df 
    str_name 
0 aaabaa 
1 aabbcb 
2 baabba 
3 aacbba 
4 baccaa 
5 ababaa 
>>> df['str_name'].str.contains('c') 
0 False 
1  True 
2 False 
3  True 
4  True 
5 False 
Name: str_name, dtype: bool 

現在,您可以「刪除」這樣

>>> df = df[~df['str_name'].str.contains('c')] 
>>> df 
    str_name 
0 aaabaa 
2 baabba 
5 ababaa 
>>> 

編輯添加的所有行:

如果你只想檢查第一個k個字符,你可以slice。假設k=3

>>> df.str_name.str.slice(0,3) 
0 aaa 
1 aab 
2 baa 
3 aac 
4 bac 
5 aba 
Name: str_name, dtype: object 
>>> df.str_name.str.slice(0,3).str.contains('c') 
0 False 
1 False 
2 False 
3  True 
4  True 
5 False 
Name: str_name, dtype: bool 

注意,Series.str.slice並不像一個典型的Python片。

+0

謝謝!如果我想檢查'str_name'中只有第一個k字母是否包含'c',該怎麼辦? –

+0

令人驚歎!真可惜,我不能投兩次票。 –

1

您可以使用str.contains()

str_name = pd.Series(['aaabaa', 'aabbcb', 'baabba', 'aacbba', 'baccaa','ababaa']) 
str_name.str.contains('c') 

這將返回布爾

下面將返回上述

~str_name.str.contains('c') 
1

的倒數可以使用numpy

df[np.core.chararray.find(df.str_name.values.astype(str), 'c') < 0] 

    str_name 
0 aaabaa 
2 baabba 
5 ababaa