使用 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 吗?我尝试这样做,但它也在过滤空值。 @kristintamas null 是什么意思? np.nan? 南值。没有价值的行 @kristintamas 您可能希望首先将所有nans 转换为空字符串。 df = df.fillna('')。或者,df = df[df['Roll.No'].astype(str).fillna('').str.contains(r'[^0-9]', na=True)] 是的,就是这样。谢谢

以上是关于使用 str.contains 使用正则表达式检查列中的数值时出错的主要内容,如果未能解决你的问题,请参考以下文章

Python series.str.contains 框架中正则表达式中的变量

如何使用正则表达式从数据框中分离数字?

如何在 Pandas 中向 .str.contains 添加多个字符串? [复制]

使用 str.contains 忽略 NaN

在 C++ 中使用正则表达式检查字符串

使用 Javascript 正则表达式检查有效的 url