我已将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'
答案 0 :(得分:0)
现在您正在呼叫df.str
。这意味着您尝试访问的数据框的str对象对python没有意义,因此会出错。不知道您要在那里做什么。在您的循环i
中将是该列。从那里您可以遍历各行,然后应用正则表达式。这在整个堆栈溢出中都有记录,但可能不是您要采用的方法。
相反,您应该创建一个将单元格作为字符串并输出后正则表达式字符串的函数。然后,您可以在熊猫中使用apply()
一次将该功能应用于每个单元格。如果您用谷歌“ apply()pandas regex”,那么很多不同的例子将向您展示如何做到这一点。 this one就是这样一个例子。
如果您要提供正则表达式的更多详细信息,我们可以帮助您更详细地构造上述结构。
答案 1 :(得分:0)
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]
你还没有发布你想浏览的专栏,所以我不得不使用你输入的字符串。