python - AttributeError:'NoneType' 对象在基于空间分隔时没有属性'split'
问题描述
我正在尝试使用以下代码分隔下面的列,但出现以下错误:
AttributeError: 'NoneType' object has no attribute 'split'
代码:
df_no_dup["tag_count"] = df_no_dup["Tags"].apply(lambda text: len(text.split(' ')))
解决方案
这意味着您None
在"Tags"
列中,因此您可以输入 if/elseapply
来说明这一点:
df_no_dup["tag_count"] = df_no_dup["Tags"].apply(lambda text: len(text.split(" "))
if text is not None
else 0)
我们将 0 放在else
子句中,因此None
s 将转换为 0 in tag_count
。
但更好的是,让我们使用str
访问器方法str.split
,str.len
它会为我们处理None
s:
df_no_dup["tag_count"] = df_no_dup["Tags"].str.split(" ").str.len()
首先拆分" "
以给出每行的列表,然后我们得到每个列表的长度。但是请注意,这将NaN
作为None
原始系列中的条目的结果。这可能是你想要的;或者如果你想用 0 填充它们,你可以链接 a fillna
:
df_no_dup["tag_count"] = (df_no_dup["Tags"]
.str.split(" ")
.str.len()
.fillna(0, downcast="infer"))
我们用 0 填充它们,但也传递downcast
,以便结果不是浮点数,而是整数,这对于计数列更有意义。(它在中间步骤中变为浮动的原因是因为NaN
(s)。)
还有一种方法是使用str.count
with" "
然后将结果加 1;我们计算空格的数量,然后再增加 1 个空格来计算字数:
df_no_dup["tag_count"] = df_no_dup["Tags"].str.count(" ").add(1)
同样,None
条目将NaN
在最后,因此您可以fillna
如上所述进行链接。
最后要注意的是,这些都在考虑一个空格;但是如果你想分割多个空格,你可以不传递任何东西str.split
,默认情况下它会这样做,str.split()
对于str.count
,你可以传递正则表达式r"\s+"
,即str.count(r"\s+")
多个连续的空格。
推荐阅读
- java - java输入输出语法(简单)
- reactjs - 最新版本的 joi-browser 和它的名称是什么?
- android - 在调用侦听器时将视图附加到 RecyclerView
- mongodb - 带有外部字段匹配的mongodb查找
- javascript - 将 JSON 对象中的数据从一类传递到另一类
- python - 为什么我们在keras模型中使用smooth变量来计算dice_coef或IoU?
- oracle - 在客户端选择时,Oracle apex-更新服务器上的项目值
- reactjs - 用“功能组件”实现事件监听和生命周期
- excel - 根据数字选择 Excel 工作表
- swift - 对 Swift 中的向下转换值感到困惑