我有一个数据帧,其中一列(UID(有7个数字或10个数字。
我写了一个正则表达式来识别7或10个数字(感谢stackoverflow中的一个非常相似的问题(。这些似乎在文本文件上运行良好。
no_7 = re.compile('(?<![0-9])[0-9]{7}(?![0-9])')
no_9 = re.compile('(?<![0-9])[0-9]{9}(?![0-9])')
再次感谢stackoverflow,我写下了以下内容。
如果该列包含7个数字,则值将复制到倒数第二列。
df['column8']=df['UID'].apply(lambda x: x if(x == re.findall(no_7, x)) else 'NaN')
如果该列为10个数字,则该列将复制到最后一列
df['column9']=df['UID'].apply(lambda x: X if(x == re.findall(no_9, x)) else 'NaN')
在调试该问题时,我发现regex永远无法将数字作为数字读取列。
Regex投诉:
TypeError:预期字符串或字节,如对象
我已经尝试设置列";UID";pd.to_numeric
我尝试过设置列";UID";df["UID"].astype(int(
我尝试过设置列";UID";df["UID"].apply(np.int64(
所有这些都假设问题是列的格式不正确,我认为现在已经不是了。
您显然在列中使用了int
类型,并且需要str
来应用字符串操作。您可以使用进行转换
df['UID'].astype(str)
然而,可能有更好的方法来做你想做的事,请根据要求改进你的问题,以获得更好的回答。