Python:panda dataframe在每行中拆分字符串,偶尔出现空行

Python:panda dataframe在每行中拆分字符串,偶尔出现空行,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个列attr的以下数据框: attr valA valA||valB||valC vaB||valC 请注意,第二行没有值。我想创建另一列,其中包含attr中的属性数,因此如下所示: attr num_attr valA 1 0 valA||valB||valC 3 vaB||valC 2 我试过: df["num_attr"] = df["attr"].map(lam

我有一个列
attr
的以下数据框:

attr
valA

valA||valB||valC
vaB||valC
请注意,第二行没有值。我想创建另一列,其中包含
attr
中的属性数,因此如下所示:

attr               num_attr
valA               1
                   0
valA||valB||valC   3
vaB||valC          2
我试过:

df["num_attr"] = df["attr"].map(lambda a: len(a.split("||")))
但它说(我想是因为空行):

AttributeError:“float”对象没有属性“split”


如何解决此问题?

因为
|
是特殊的正则表达式字符,必须通过中的
\
对其进行转义,然后通过获取长度,替换缺少的值并转换为整数:

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
使用并添加
1
的另一个类似解决方案:

df["num_attr"] = df["attr"].str.count("\|\|").add(1).fillna(0).astype(int)
如果要使用您的解决方案,请添加
If-else
语句,其中包含:

或:


哇,谢谢,我不知道
|
系列中的一个特殊字符。str.split
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)