如何用Pandas查询DataFrame中agg_data列含Null且长度为2的行?
解决DataFrame筛选
agg_data列的问题 需求回顾
筛选agg_data列满足以下两个条件的行:
- 列中列表的长度等于2
- 列表内包含
None或空字符串''
原有写法的问题分析
- 第一个lambda条件:逻辑本身正确,但未通过
apply方法作用于agg_data的每个列表元素,无法实现逐行判断。 - 第二个条件:完全逻辑错误:
result['agg_data'].isnull().any()是检查整个列是否存在元素本身为NaN的情况,而非列表内部的nulllen(result['agg_data'] == 2)计算的是布尔系列的总长度,不是每个列表的长度
正确实现方法
方法一:使用apply结合自定义函数
def check_list(lst): # 判断列表长度为2,且包含空值/None return len(lst) == 2 and any(val is None or val == '' for val in lst) # 筛选符合条件的行 filtered_df = result[result['agg_data'].apply(check_list)]
方法二:向量化操作(大数据量推荐)
# 条件1:列表长度等于2 cond_length = result['agg_data'].str.len() == 2 # 条件2:列表包含空值/None cond_has_null = result['agg_data'].apply(lambda x: any(val is None or val == '' for val in x)) # 合并条件筛选 filtered_df = result[cond_length & cond_has_null]
补充说明
如果你的null是numpy的np.nan(而非Python原生None),需要调整判断逻辑,加入pd.isna()检测:
def check_list(lst): return len(lst) == 2 and any(val is None or pd.isna(val) or val == '' for val in lst)
内容的提问来源于stack exchange,提问作者Md Parvez Alam
相关产品推荐
相关产品推荐

