Pandas 删除列包含 * 的行

Posted

技术标签:

【中文标题】Pandas 删除列包含 * 的行【英文标题】:Pandas drop rows where column contains * 【发布时间】:2017-09-19 23:51:24 【问题描述】:

我正在尝试从此 df 中删除所有行,其中列“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】:

通过\ 转义*,因为* 被解释为regex:

'*' 使生成的 RE 匹配前面 RE 的 0 次或多次重复

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

如果还得到:

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

如果可能,NaNs 值:

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

【讨论】:

以上是关于Pandas 删除列包含 * 的行的主要内容,如果未能解决你的问题,请参考以下文章

【pandas笔记】删除DataFrame中特定所在的行或列

pandas如何删除指定行

Pandas DataFrame筛选包含某个关键词的行/列

Python3教程:Pandas模块删除数据的几种情况

如何在 Pandas 的列中删除不包含字符串类型的行?

我有一个 SAP 生成的文件,其中包含许多列和一些不需要的行。我应该如何直接读入 Pandas?