Pandas:从列中复制值.UID到第8列或第9列,具体取决于值的长度



我有一个数据帧,其中一列(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)

然而,可能有更好的方法来做你想做的事,请根据要求改进你的问题,以获得更好的回答。

最新更新