如何统计含NaN值的pandas列中列表的长度?
解决方案:计算DataFrame中列表列的长度(NaN/空列表返回0)
这里提供几种实用方法,可根据数据规模灵活选择:
方法1:简单直观的apply+lambda(小数据集适用)
直接遍历每行,判断是否为NaN,是则返回0,否则计算列表长度:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'My_column': [[1,2], [], np.nan, [3,4,5], np.nan] }) df['list_length'] = df['My_column'].apply(lambda x: len(x) if pd.notna(x) else 0)
方法2:高效向量化方法(大数据集推荐)
利用pandas的str.len()方法自动识别列表长度,遇到NaN返回NaN后用fillna(0)替换,效率远高于apply:
df['list_length'] = df['My_column'].str.len().fillna(0).astype(int)
注:
str.len()不仅能处理字符串,对列表、元组等可迭代对象也能正确返回长度,非常便捷。
方法3:处理混杂数据类型(若列中存在非列表/NaN的其他类型)
如果列里除了列表和NaN,还有其他数据类型,可通过类型判断确保只计算列表长度,其余情况返回0:
df['list_length'] = df['My_column'].apply(lambda x: len(x) if isinstance(x, list) else 0)
验证结果
运行上述代码后,示例DataFrame的list_length列结果为:[2, 0, 0, 3, 0],完全符合需求。
内容的提问来源于stack exchange,提问作者Droid-Bird
相关产品推荐
相关产品推荐

