【问题标题】:How to delete the rows in pandas where all the column values are null except first three columns?如何删除除前三列外所有列值为空的熊猫中的行?
【发布时间】:2019-08-05 17:33:56
【问题描述】:

我有一个这样的数据框:

df
col1   col2   col3   col4   col5    col6
 1      2       NA    3      NA      NA
 4      5       6     7      NA      NA
 8      9       NA    NA     NA      NA
 10     11      NA    NA     NA      NA
 13     14      15    NA     16      17

col1 和 col2 没有 NA 值,我想删除从 col3 到 col6(可以是 col100 等)的所有值都是 NA 的那些行。

我可以使用以下代码来做到这一点,

 df[(df.col3.notnull)&(df.col4.notnull)&(df.col5.notnull)&(df.col6.notnull)]

但是如果列数增加,这个任务就不是个好主意了,把所有的列名都写在里面,

我正在寻找的结果是,

df
col1   col2   col3   col4   col5    col6
 1      2       NA    3      NA      NA
 4      5       6     7      NA      NA
 13     14      15    NA     16      17

有没有什么 pandas 技巧可以以最有效的方式做到这一点?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    这是dropnathresh 的一种方式:每行3 个有效值

    df.dropna(thresh=3)
    Out[254]: 
       col1  col2  col3  col4  col5  col6
    0     1     2   NaN   3.0   NaN   NaN
    1     4     5   6.0   7.0   NaN   NaN
    4    13    14  15.0   NaN  16.0  17.0
    

    【讨论】:

    • 这也将NaN 计入前三列。
    • @QuangHoang col1 和 col2 没有 NA 值
    • 啊,抱歉,我确实错过了那部分。
    【解决方案2】:

    另一种方法是忽略col1col2 并检查all(axis=1) 是否适用

    df.drop(['col1', 'col2'],1).isnull().all(1)
    

    【讨论】:

      【解决方案3】:

      另一种方法是计算 sum 和 filter 不等于 0:

      df[df.iloc[:,2:].sum(1).ne(0)]
      

         col1  col2  col3  col4  col5  col6
      0     1     2   NaN   3.0   NaN   NaN
      1     4     5   6.0   7.0   NaN   NaN
      4    13    14  15.0   NaN  16.0  17.0
      

      【讨论】:

        猜你喜欢
        • 2019-11-08
        • 2013-10-04
        • 2019-06-20
        • 2015-05-19
        • 2017-06-26
        • 2015-11-07
        • 2013-04-30
        • 1970-01-01
        • 2018-05-03
        相关资源
        最近更新 更多