在熊猫中选择行不包含特定字符
问题描述:
我需要类似在熊猫中选择行不包含特定字符
.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')的位置未知。
任务是除去不包含至少一个特定字母
答
你想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片。
答
您可以使用str.contains()
str_name = pd.Series(['aaabaa', 'aabbcb', 'baabba', 'aacbba', 'baccaa','ababaa'])
str_name.str.contains('c')
这将返回布尔
下面将返回上述
~str_name.str.contains('c')
答
的倒数可以使用numpy
df[np.core.chararray.find(df.str_name.values.astype(str), 'c') < 0]
str_name
0 aaabaa
2 baabba
5 ababaa
谢谢!如果我想检查'str_name'中只有第一个k字母是否包含'c',该怎么办? –
令人惊叹!真可惜,我不能投两次票。 –