pandas列表列统计元素个数结果不符合预期的问题排查
问题原因排查
1. lambda逻辑本身存在错误
你写的判断逻辑和预期完全不符:
如果x是真·空列表[],not x结果为True,代码会返回len([])-1 = -1,和你要的0的结果完全相悖。基础逻辑应该修改为空列表返回0,非空返回长度:
lambda x: 0 if not x else len(x)
2. 你列中的“空列表”并非Python原生空列表
你当前空行输出为1,说明这些行的x布尔值为真(not x为False),走了else分支返回len(x)=1,最常见的场景是:
该列由字符串分割生成,比如用str.split()处理空字符串时,返回的是[''](包含1个空字符串的列表),而非你以为的空列表[]。
你可以先执行以下代码确认元素的真实类型和值:
# 查看前5行元素类型 print(dftouse['col a'].apply(type).head()) # 查看第一行的真实值 print(dftouse['col a'].iloc[0])
修复方案
如果确认是分割产生的['']假空值,用以下代码统计即可:
dftouse['count'] = dftouse['col a'].apply(lambda x: 0 if x == [''] else len(x))
如果是其他类型的假空值,根据实际返回的x值调整判断条件即可。
内容的提问来源于stack exchange,提问作者shan
相关产品推荐
相关产品推荐

