Pandas和本网站的其他问题/答案为我们知道要保存的非NaN数量的情况提供了解决方案。我怎样才能有效地删除最差的行,或者如果有多个行是最差的行。下面的一些示例显示了如何通过设置轴来删除列,也可以是行。但是,我们需要指定要保留多少个非NaN。
>>> import numpy as np
>>> df = pd.DataFrame([[1,np.nan,1,np.nan], [1,1,1,1], [1,np.nan,1,1], [np.nan,1,1,1]], columns=list('ABCD'))
A B C D
0 1.0 NaN 1 NaN
1 1.0 1.0 1 1.0
2 1.0 NaN 1 1.0
3 NaN 1.0 1 1.0
>>> df.dropna(thresh=3, axis=1)
A C D
0 1.0 1 NaN
1 1.0 1 1.0
2 1.0 1 1.0
3 NaN 1 1.0
或者将它们全部删除:
>>> df.dropna(axis=1)
C
0 1
1 1
2 1
3 1
注意我在下面给予更多的背景。虽然一个具体的解决方案的提示是受欢迎的,我更喜欢一个关于一般情况的答案,如文章标题所述。
上下文我正在寻找一种有效的方法来删除具有最大数量NaN的行(或者如果在最大数量处存在关系,则删除行),然后类似地删除列,以便我可以重复这两个步骤,直到所有NaN被删除。目标是删除NaN,保留保持表一致的最大可能数据量,即只允许删除整个行/列。请阅读上面的通知。
上面的例子摘自这个答案:https://stackoverflow.com/a/68306367/9681577
1条答案
按热度按时间z0qdvdin1#
您可以使用布尔索引与NaN的计数:
De Morgan's等价性:
输出:
列
另一个轴上的逻辑相同:
输出: