python - Pandas 新列作为另一列的字符串提取,仅在验证字符串长度的特定条件下 : Fast way

标签 python pandas dataframe

我正在处理一个大型 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.wherestr.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/

相关文章:

python - 使用 pandas.to_excel 时格式化 timedelta64

python - 使用 KNN 在 python 中缺失值插补

python - PySpark 2.4 : TypeError: Column is not iterable (with F. col() 用法)

python - 将具有不同列名的数据框与聚合列值合并

r - 从第二列排序的拣选值

python - 在数据框列中保留重复项的第一个和最后一个条目

r - 在保留索引的同时按向量排序 Dataframe

python - MySQL 中出现错误 1146 的问题

python - Pandas:根据条件去除数据帧组末尾的行

python - Pandas 数据框排除特定范围内的行