我是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()。
答案 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