在Pandas中选择不包含特定字符的行

时间:2017-01-20 00:50:15

标签: python pandas

我需要类似于

的东西
.str.startswith() 
.str.endswith()

但是对于字符串的中间部分。

例如,给定以下pd.DataFrame

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

我需要抛出包含(至少一个)字母'c'的第1,3和4行 特定字母('c')的位置未知 任务是删除所有包含至少一个特定字母的行

3 个答案:

答案 0 :(得分:5)

您想要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切片不同。

答案 1 :(得分:1)

您可以使用str.contains()

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

这将返回布尔值

以下将返回上述

的反转
~str_name.str.contains('c')

答案 2 :(得分:1)

您可以使用numpy

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

  str_name
0   aaabaa
2   baabba
5   ababaa