pandas中sort_values后筛选列行为异常及排序列名获取咨询
缺失值列筛选与排序问题解答
问题1:排序后筛选列出现异常的原因
当你执行data.isna().sum().sort_values()时,得到的是一个按缺失值数量重新排序后的Series——它的索引还是原数据的列名,但顺序已经被打乱了。而你用data.columns[xxx > 0]提取列名时,本质是用xxx > 0生成的布尔数组,去匹配data.columns的原始顺序。布尔数组的位置对应排序后Series的行位置,和原列的位置完全不匹配,自然会提取到错误的列名。
举个直观的例子:排序后的Series里,Car对应的布尔值是True,但这个True在布尔数组里的位置是第18位(从0计数),对应data.columns[18]刚好是Latitude,这就是你得到错误结果的核心原因。
问题2:获取按缺失值升序排列的非零列名列表的方法
正确的思路是先锁定缺失值非零的统计结果,再排序,最后提取列名(即Series的索引),以下是两种简洁可行的写法:
方法一:先筛选再排序
# 先过滤出缺失值>0的统计项,按值升序排序后提取列名转列表 missing_cols = data.isna().sum()[data.isna().sum() > 0].sort_values().index.tolist()
方法二:排序后再筛选
# 先整体排序,再筛选出缺失值>0的项,最后提取列名转列表 missing_cols = data.isna().sum().sort_values().loc[lambda x: x > 0].index.tolist()
两种方法都会得到正确结果:['Car', 'CouncilArea', 'YearBuilt', 'BuildingArea'],完全符合你要的升序排列要求。
内容的提问来源于stack exchange,提问作者Anonymous Person
相关产品推荐
相关产品推荐

