【问题标题】:Python DataFrame: how to delete rows where more than one column is populated?Python DataFrame:如何删除填充多列的行?
【发布时间】:2019-11-04 11:39:08
【问题描述】:

我有一个数据框,其中的列应该是虚拟列(对于每一行,应该只填充一列)。但是,数据中有一些“噪音”:某些行填充了不止一列。我想删除这些行。

假设 DataFrame 如下例所示:

  a       b        c        d  
0 NaN     1        NaN      NaN
1 1       2        3        4  
2 1       1        NaN      NaN 
3 NaN     NaN      1        NaN
4 1       NaN      1        NaN

所以我的预期结果是行 [1,2,4] 被删除。你可能会说我只接受 NaN 值的数量等于 number_of_columns - 1 的行。

有没有办法在熊猫中做到这一点?

【问题讨论】:

    标签: python pandas dataframe data-cleaning


    【解决方案1】:

    这个会带你到那里。您只需计算一行中的空值数量,然后据此对帧进行切片。

    df[df.notna().sum(axis=1) <= 1]
        a    b    c   d
    0 NaN  1.0  NaN NaN
    3 NaN  NaN  1.0 NaN
    

    【讨论】:

    • 谢谢,这是一个完美的解决方案,它还允许您根据数据框中的列子集删除行!
    【解决方案2】:

    用途:

    df[(df.shape[1]-1)==(df.isna().sum(axis=1))]
    

        a    b    c   d
    0 NaN  1.0  NaN NaN
    3 NaN  NaN  1.0 NaN
    

    【讨论】:

    • 感谢以上!假设我的数据有更多列,并且我想只根据上面的列子集删除行,你会怎么做?
    • @Maciej 如果我理解的话,您可以创建一个副本m=df.loc[:,[interested_columns]].copy(),然后将代码中的df 替换为m
    猜你喜欢
    • 2020-07-19
    • 1970-01-01
    • 2020-06-28
    • 2019-04-26
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多