Pandas新列作为字符串提取的另一个只在一定条件下对字符串长度进行验证:快速方式

2024-09-30 03:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个大的df(接近200万行),需要从另一个df创建一个新列。任务似乎很简单:名为“PTCODICEFISCALE”的起始列包含一个由11个或16个字符组成的字符串,没有其他可能性,也没有NaN。 我必须创建的新列(“COGNOME”)必须包含“PTCODICEFISCALE”的前3个字符,前提是“PTCODICEFISCALE”第n行的长度为16;否则,当长度为11时,新列应该不包含任何内容,我认为这意味着“NaN”。你知道吗

我试过这个:

csv.loc[len(csv['PTCODICEFISCALE']) == 16, 'COGNOME'] = csv.loc[csv.PTCODICEFISCALE.str[:3]]

在输出中,将显示此错误消息:

ValueError: cannot index with vector containing NA / NaN values

我不明白。 我确信“PTCODICEFISCALE”列中没有NA/NaN。你知道吗

有什么帮助吗?谢谢!你知道吗

备注:“csv”是数据帧的名称


Tags: csv字符串内容dflen错误nan可能性
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:02

我想你需要^{}^{}的条件:

csv['COGNOME'] = np.where(csv.PTCODICEFISCALE.str.len() == 16, csv.PTCODICEFISCALE.str[:3], np.nan)

样品:

csv = pd.DataFrame({'PTCODICEFISCALE':['0123456789123456','1','01234567891234']})
print (csv)
    PTCODICEFISCALE
0  0123456789123456
1                 1
2    01234567891234

csv['COGNOME'] = np.where(csv.PTCODICEFISCALE.str.len() == 16, csv.PTCODICEFISCALE.str[:3], np.nan)

print (csv)
    PTCODICEFISCALE COGNOME
0  0123456789123456     012
1                 1     NaN
2    01234567891234     NaN

相关问题 更多 >

    热门问题