嵌套for循环统计DataFrame列中负值数量为何不准确?
问题分析:DataFrame负值统计结果不准确的原因
你编写的嵌套循环代码运行无报错,但统计结果遗漏大量负值,核心问题出在内层循环的break语句上:
错误代码回顾
input_negative_vars_dict = {} for col in input_colnames: count = 0 for row in input_df[col]: if row < 0: count +=1 else: break # 错误根源所在 input_negative_vars_dict[col] = count # 转换为DataFrame并导出 input_negative_vars_df = pd.DataFrame(list(input_negative_vars_dict.items()), columns = ['colname', 'count_input'])
错误原因详解
内层循环中,当遍历到列里**第一个非负值(即row >= 0)**时,else分支的break会直接终止当前列的遍历过程。这意味着代码只会统计列开头连续的负值数量,完全跳过后续所有元素——哪怕后面还有大量负值,也不会被计数。
举个实际例子:如果某列数据是[-3, -1, 2, -5, -2],你的代码只会统计前2个负值,后面的-5和-2因为前面遇到了2触发break,根本不会被遍历统计。
修正思路(可选)
用Pandas内置方法可以更高效且准确地实现需求,避免手动循环的错误:
# 对指定列统计负值数量 negative_counts = input_df[input_colnames].lt(0).sum() # 转换为目标DataFrame格式 input_negative_vars_df = negative_counts.reset_index(name='count_input').rename(columns={'index':'colname'})
内容的提问来源于stack exchange,提问作者Ivy McKee
相关产品推荐
相关产品推荐

