使用 str.contains 使用正则表达式检查列中的数值时出错
Posted
技术标签:
【中文标题】使用 str.contains 使用正则表达式检查列中的数值时出错【英文标题】:Error while using str.contains for checking numeric values in a column using regex 【发布时间】:2021-12-30 11:05:13 【问题描述】:我有一个数据框。我想检查特定列是否具有数值或不使用正则表达式匹配。当我使用str.contains
时,它会显示如下错误。检查列中的所有值是否都有数值的正确方法是什么?
df=
Roll.No Words
20 two
30 three
40 four
50 five
60 Nan
70 Nan
df = df[df['Roll.No'].str.contains(r'[^0-9]', na=True)]
Error: AttributeError: Can only use .str accessor with string values!
【问题讨论】:
看起来Roll.No
是一个数字列。你想在那里找到什么?点和逗号?然后将其转换为 str,df[df['Roll.No'].astype(str).str.contains(r'[^0-9]', na=True)]
是的。如果有特殊字符或字符串值,我粘贴的代码将起作用。我只想检查一列是否只有数值,无论该列是数字字符还是特殊字符。如果存在特殊字符或字符串值,则应删除,如果没有特殊字符或字符串值,则应保持不变
【参考方案1】:
你可以使用
df = df[df['Roll.No'].astype(str).str.contains(r'[^0-9]', na=True)]
使用.astype(str)
,您将能够在数字列上运行正则表达式。
.str.contains(r'[^0-9]', na=True)
表达式将查找至少包含一个非数字字符(如点或逗号)的所有值。
【讨论】:
感谢您的回答,但是如果该列有空值并且我不想将它们过滤掉怎么办?应该 na= False 吗?我尝试这样做,但它也在过滤空值。 @kristintamasnull
是什么意思? np.nan
?
南值。没有价值的行
@kristintamas 您可能希望首先将所有nan
s 转换为空字符串。 df = df.fillna('')
。或者,df = df[df['Roll.No'].astype(str).fillna('').str.contains(r'[^0-9]', na=True)]
是的,就是这样。谢谢以上是关于使用 str.contains 使用正则表达式检查列中的数值时出错的主要内容,如果未能解决你的问题,请参考以下文章
Python series.str.contains 框架中正则表达式中的变量