我正在使用大型df(接近2百万行),需要从另一个创建一个新列。这个任务看起来很简单:名为“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。
有任何帮助吗?谢谢!
P.S。:“csv”是DataFrame的名称
答案 0 :(得分:3)
我认为您需要numpy.where
并且条件为str.len
:
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