如何使用正则表达式从数据框中分离数字?
Posted
技术标签:
【中文标题】如何使用正则表达式从数据框中分离数字?【英文标题】:How to separate numbers from a data frame using regular expression? 【发布时间】:2019-11-01 09:32:16 【问题描述】:我已将 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'
【问题讨论】:
***.com/questions/3868753/… 添加一些示例数据,以便我们查看您的“特定模式”是什么样的。.str
是为 Series
对象定义的,而不是 DataFrame
对象。请阅读docs
@Erfan 是的,我添加了一个示例模式。
【参考方案1】:
-
先导入正则表达式
import re
-
最好新建一列
df['new_1'] = re.search('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', df['<num_col_name>'])
-
现在检查
new_1
列
df['new_1]
您还没有发布您想要浏览的专栏,所以我不得不使用您输入的字符串。
【讨论】:
【参考方案2】:现在你正在打电话给df.str
。这意味着您正在尝试访问数据框的 str 对象,这对 python 没有意义,因此会出现错误。不知道你想在那里做什么。在您的循环中,i
将是列。从那里您可以遍历行,然后应用正则表达式。这在整个堆栈溢出中都有记录,但可能不是您想要采用的方法。
相反,您应该创建一个函数,将单元格作为字符串接收并输出正则表达式后的字符串。然后,您可以在 pandas 中使用 apply()
将该函数一次全部应用于每个单元格。如果你用谷歌搜索“apply() pandas regex”,一堆不同的例子会告诉你如何做到这一点。一个这样的例子是this one。
如果您提供更多关于您尝试完成的正则表达式的详细信息,我们可以帮助您更详细地制作上述结构。
【讨论】:
他很可能尝试使用 pandas 提供的字符串访问器。使用apply
不应该是他的首选,即使是列表理解也会更好。
我添加了更多信息。谢谢!以上是关于如何使用正则表达式从数据框中分离数字?的主要内容,如果未能解决你的问题,请参考以下文章