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
如果可能,NaN
s 值:
df = df[~df['DB Serial'].str.contains('\*', na=False)]
【讨论】:
以上是关于Pandas 删除列包含 * 的行的主要内容,如果未能解决你的问题,请参考以下文章