此问题来自Data Science Stack Exchange的migrated,因为它可以在Stack Overflow. Migrated上回答4天前。isna()
的结果如下:
data.isna().sum().sort_values()
个字符
我想做的是在一个列表中按值的升序获得列名,其中它们是非零的-所以在最后四个以上的情况下。所以本质上,我这样做了,但它给了我错误的结果:
>>> list(data.columns[data.isna().sum().sort_values() > 0])
['Lattitude', 'Longtitude', 'Regionname', 'Propertycount']
型
如果我不对它排序,它会像预期的那样工作:
>>> list(data.columns[data.isna().sum() > 0]) # no `.sort_values()`
['Car', 'BuildingArea', 'YearBuilt', 'CouncilArea']
型
但我想把名单整理一下
顺便说一句,这与isnull()
的行为相同
我的问题是:
1.为什么会发生上述情况?为什么对结果进行排序会产生给予一些奇怪的输出(而且每次都是一样的--不管你运行多少次)
1.我怎样才能在列表中按升序获得列的名称?
1条答案
按热度按时间4dc9hkyq1#
字符串
让我们来分解这个表达式:
data.isna().sum()
将创建一个序列,其中列名作为索引,NaN的计数作为值。应用
sort_values()
方法将根据NaN计数对上述序列进行排序,从而更改索引元素的顺序。更改索引元素的顺序将更改列名的顺序。现在,当你使用排序序列过滤数据集的列时,就像在
data.columns[data.isna().sum().sort_values() > 0]
中一样,你本质上是用一个有排序索引的序列**索引未排序的data.columns
。这就是你的表达式中出现意外行为的原因。要解决这个问题,您需要首先对NaN count Series进行排序,然后从这个排序的Series中提取计数大于0的列名。您可以执行以下操作:
型