pandas:根据值的长度,将值从column.uid复制到column8或column9

ghhaqwfi  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(373)

我有一个数据框,其中一列(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投诉:
typeerror:应为字符串或类似字节的对象
我已尝试将列“uid”pd设置为\u numeric
我已尝试设置列“uid”df[“uid”]。astype(int)
我已尝试设置列“uid”df[“uid”].apply(np.int64)
所有这些都假设问题在于列的格式不正确,我认为现在已经不是了。

drkbr07n

drkbr07n1#

你显然在使用 int 在你的栏中键入你需要的信息 str 应用字符串操作。您可以使用以下方法进行转换:

df['UID'].astype(str)

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

相关问题