如果除了一列之外的所有列都为空,我希望删除整行。
df = pd.DataFrame({"col1": ["s1", "s2", "s3", "s4", "s5", "s6"],
"col2": [41, np.nan, np.nan, np.nan, np.nan, 61],
"col3": [24, 51, np.nan, np.nan, np.nan, 84],
"col4": [53, 64, 81, np.nan, np.nan, np.nan],
"col5": [43, 83, 47, 12, np.nan, 19]})
它看起来像这样
col1 col2 col3 col4 col5
0 s1 41 24 53 43
1 s2 NaN 51 64 83
2 s3 NaN NaN 81 47
3 s4 NaN NaN NaN 12
4 s5 NaN NaN NaN NaN
5 s6 61 84 NaN 19
在此示例中,所需结果为
col1 col2 col3 col4 col5
0 s1 41 24 53 43
1 s2 NaN 51 64 83
2 s3 NaN NaN 81 47
3 s4 NaN NaN NaN 12
4 s6 61 84 NaN 19
这意味着我想删除最后一行。我最初尝试使用df.dropna(how="all")
,但它不起作用,因为最后一行不是完全空的(col1
中的s5
)。
我该如何解决这个问题?
6条答案
按热度按时间3mpgtkmj1#
使用
thresh
参数:或者,如果您希望精确匹配
N
NA(不多不少):输出量:
0lvr5msh2#
0wi1tuuw3#
您应该在dropna中使用threshold。
7ivaypg94#
您也可以尝试使用此方法来检查元素是否为
NaN
。np.isnan()
以下是官方文档以获取更多信息。https://numpy.org/doc/stable/user/misc.html
rsaldnfx5#
作为给定答案的替代方法,如果您希望使用
.dropna()
,可以使用以下命令将col1
设置为索引:这样
df.dropna(how='all')
就像一个符咒。如果你不再需要它作为索引,你可以通过df['col1'] = df.index
取回你的列,并重置索引df.reset_index(drop=True)
col1
将出现在col5
之后,您可以使用以下命令将其重新排列:2g32fytz6#
在编辑中添加:
只需从行计数中删除不相关的列。