我有数据框:
Col1 Col2
Rowab1 3 5
Rowbc2 4 6
Rowxy3 7 2
我想搜索数据框,只保留行名称包含“bc”的行,同时删除其余的行:
Col1 Col2
Rowab1 3 5
Rowxy3 7 2
我有以下代码:
df.loc[df.index.isin(['bc'])]
但是,这不会在字符串中搜索“bc”,但会搜索整个独立字符串“bc”。是否有任何“喜欢”的运营商可以合并,例如
df.loc[df.index.isin(['%bc%'])] ?
谢谢!
答案 0 :(得分:2)
您在帖子中说您希望删除不包含“bc”的每一行。以下是各种解决方案:
使用简单的字符串成员资格测试:
>>> df.ix[[i for i in df.index if 'bc' in i]]
Col1 Col2
Rowbc2 4 6
使用正则表达式和re
模块:
>>> df.ix[[i for i in df.index if re.match('.+bc.+', i)]]
Col1 Col2
Rowbc2 4 6
您也可以使用pandas.Series.str.match
,正如我在评论中提到的那样:
>>> df[pd.Series(data=df.index, index=df.index).str.match('.+bc.+')]
Col1 Col2
Rowbc2 4 6
您无法在pandas.core.indexes.base.Index
对象上直接使用pandas.Series.str.match
,因此我只是将其转换为pandas.Series
对象,并将有效垃圾作为值。您可以使用str
个对象附带的Series
访问者。
答案 1 :(得分:2)
pd.Series.str.find
的另一种选择:
In [41]: df
Out[41]:
Col1 Col2
Rowab1 3 5
Rowbc2 4 6
Rowxy3 7 2
In [42]: df[df.index.str.find('bc') > -1]
Out[42]:
Col1 Col2
Rowbc2 4 6