首页 > 解决方案 > 如何使用正则表达式将数字与数据框分开?

问题描述

我已将 excel 表中的一整列读入数据框。该列中的每个单元格都有一堆带数字的单词(如电话号码)。如何循环数据框并使用正则表达式使用特定模式提取数字。

我试过下面的代码

for i in (df): 
   df.str.contains('(4[0-9]{12}([0-9]{3})|[25][1-7][0-9]{14}|6(011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}')

我知道我的正则表达式是错误的,但我收到以下错误。

编辑:我已经更新了我的正则表达式。单元格有这样的数据

“你好,我想点东西……我的卡号是45621……” 我想把卡号拿出来存一个文件。

Traceback (most recent call last):
  File "c:/Program Files/Python37/Scripts/output.py", line 12, in <module>
    df.str.contains('^f')
  File "C:\Program Files\Python37\lib\site-packages\pandas\core\generic.py", line 5067, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'str'

标签: python-3.xpandasdataframe

解决方案


现在你正在打电话df.str。这意味着您正在尝试访问数据框的 str 对象,这对 python 没有意义,因此会出现错误。不知道你想在那里做什么。在您的循环i中将是列。从那里您可以遍历行,然后应用正则表达式。这在整个堆栈溢出中都有记录,但可能不是您想要采用的方法。

相反,您应该创建一个将单元格作为字符串接收并输出正则表达式后字符串的函数。然后,您可以使用apply()inside pandas 将该功能一次应用于每个单元格。如果你用谷歌搜索“apply() pandas regex”,一堆不同的例子会告诉你如何做到这一点。一个这样的例子就是这个

如果您提供更多关于您尝试完成的正则表达式的详细信息,我们可以帮助您更详细地制作上述结构。


推荐阅读