Pandas删除列包含*的行

war*_*nry 4 python pandas

我试图从这个df中删除列'DB Serial'包含字符*的所有行:

    DB Serial
0     13058
1     13069
2    *13070
3     13070
4     13044
5     13042
Run Code Online (Sandbox Code Playgroud)

我在用:

df = df[~df['DB Serial'].str.contains('*')]
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

    raise error, v # invalid expression
error: nothing to repeat
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 6

逃生*\原因*被解释为正则表达式:

'*'使得到的RE匹配前面RE的0或更多次重复

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

如果还得到:

TypeError:一元的坏操作数类型〜:'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
Run Code Online (Sandbox Code Playgroud)

如果可能的NaNs值:

df = df[~df['DB Serial'].str.contains('\*', na=False)]
Run Code Online (Sandbox Code Playgroud)