根据一列中的子字符串删除数据框的行

时间:2019-04-13 16:58:57

标签: pandas python-2.7

我是python的新手,我想根据其列之一上的子字符串从pandas数据框中删除行。我该怎么办?

到目前为止,我设法找到了子字符串在每行上的位置,但是我无法获取子字符串本身,因此我可以删除它们引用的行。

一个例子是这样的:

a = [['a', 1, 'abc 15 hij on 11/11/18'], ['b', 2, np.nan], ['c',3, 'efg abc 25'], ['a', 15, np.nan], ['c', 25, np.nan], ['a', 10, np.nan]]
df = pd.DataFrame(a)
df.columns = ['Id', 'Action', 'description']

那给了我df:

  Id  Action             description
0  a       1  abc 15 hij on 11/11/18
1  b       2                     NaN
2  c       3              efg abc 25
3  a      15                     NaN
4  c      25                     NaN
5  a      10                     NaN

在这种情况下,id喜欢删除第3行和第4行,因为在模式“ abc”之后的列说明中引用了“操作”列中的数字(15和25)。 到目前为止,我要做的是:

b = df.description
c = b.str.find('abc')
d = c+4
e = b.str.get(d)

但是当我使用.str.get函数时,它返回以下错误: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

1 个答案:

答案 0 :(得分:0)

pandas.Series.str.extract可能会对您有所帮助。

excludes = set(df.description.str.extract('abc (\d+)')[0].values) - set([np.nan])
df[~df['Action'].isin(excludes)]

产生:

  Id  Action             description
0  a       1  abc 15 hij on 11/11/18
1  b       2                     NaN
2  c       3              efg abc 25
5  a      10                     NaN