想找到表格一列中所有位数为8位、18位的数字,提取出来成为新的一列。
该列中有中文、数字、字母加数字的内容。
请问各位要怎么用python实现呀?
我参考了别人的代码用的是:
data['号码'] = data['text'].apply(lambda x:re.findall(r"\d{8}",x))
但是会把位数大于8的数字拆分为几个8位数的。
谢谢大家!!
data['号码'] = data['text'].apply(lambda x:re.findall(r"\d{18}|\d{8}\D",x))
【以下回答由 GPT 生成】
通过使用正则表达式的re.findall()
函数可以提取指定位数的数字。在问题中,需要提取8位和18位的数字。
你已经尝试了使用以下代码进行提取:
data['号码'] = data['text'].apply(lambda x:re.findall(r"\d{8}", x))
这个方法的问题在于它只能提取连续8位的数字,对于超过8位的数字会进行拆分。为了解决这个问题,我们可以使用更精确的正则表达式。
下面是一个更好的解决方案,它可以同时提取8位和18位的数字,并将它们放入新的一列。
import re
data['号码'] = data['text'].apply(lambda x: re.findall(r"\b(\d{8}|\d{18})\b", x))
这里使用了\b
来表示词边界,确保提取的数字满足8位或18位,并且不会拆分成多个部分。然后使用re.findall()
函数将所有匹配的数字提取出来,并将它们赋值给新的一列号码
。
注意:在使用这个解决方案之前,你需要确保已经导入了re
模块,并将输入数据存储在名为data
的DataFrame中,且要提取的列名为text
。
希望这个解决方案对你有所帮助!如果还有其他问题,请随时提问。
【相关推荐】