删除Pandas数据框中某列包含*的行

7

我正在尝试从这个数据框中删除所有包含字符*的“DB Serial”列中的行:

    DB Serial
0     13058
1     13069
2    *13070
3     13070
4     13044
5     13042

我正在使用:

df = df[~df['DB Serial'].str.contains('*')]

但是我遇到了这个错误:

    raise error, v # invalid expression
error: nothing to repeat
1个回答

14

因为 *正则表达式 中有特殊含义(表示匹配零个或多个在它之前的字符),所以需要通过 \ 转义 *

'*' 的作用是匹配其之前的 RE 出现 0 次或多次

df = df[~df['DB Serial'].str.contains('\*')]
print (df)
  DB Serial
0     13058
1     13069
3     13070
4     13044
5     13042

如果出现以下错误:

 

TypeError: bad operand type for unary ~: 'float'

那么请将该列转换为string,因为该列存在混合值-数字和字符串。

df = df[~df['DB Serial'].astype(str).str.contains('\*')]
print (df)
  DB Serial
0     13058
1     13069
3     13070
4     13044
5     13042

如果可能,NaN 值:

df = df[~df['DB Serial'].str.contains('\*', na=False)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接