因为
|
是否需要特殊的正则表达式字符
\
在里面
Series.str.split
,然后通过
Series.str.len
,替换缺少的值并转换为整数:
df["num_attr"] = df["attr"].str.split("\|\|").str.len().fillna(0).astype(int)
print (df)
attr num_attr
0 valA 1
1 NaN 0
2 valA||valB||valC 3
3 vaB||valC 2
另一个类似的解决方案
Series.str.count
加上
1
:
df["num_attr"] = df["attr"].str.count("\|\|").add(1).fillna(0).astype(int)
如果想使用你的解决方案添加
if-else
声明
pandas.notna
:
df["num_attr"] = df["attr"].map(lambda a: len(a.split("||")) if pd.notna(a) else 0)
或:
df["num_attr"] = df["attr"].map(lambda a: a.count("||") + 1 if pd.notna(a) else 0)