我正在处理一个大型 df(近 200 万行),需要从另一列创建一个新列。该任务看起来很简单:名为“PTCODICEFISCALE”的起始列包含一个由 11 个或 16 个字符组成的字符串,没有其他可能性,没有 NaN。 仅当“PTCODICEFISCALE”第 n 行的长度为 16 时,我必须创建的新列(“COGNOME”)必须包含“PTCODICEFISCALE”的前 3 个字符;否则,当长度为 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 的名称
最佳答案
我认为你需要 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
关于python - Pandas 新列作为另一列的字符串提取,仅在验证字符串长度的特定条件下 : Fast way,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40404131/