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)