【问题标题】:I would like to know, which particular set of columns have Null value [duplicate]我想知道,哪一组特定的列具有 Null 值 [重复]
【发布时间】:2019-10-10 14:26:57
【问题描述】:

我目前正在处理超过 100 列的数据集,在这 100 列中,前四列为我提供了标签、描述、目标、部门等基本信息。除了其他四列之外,请为我提供数据值。对于那些数据值为空的基本信息,有一些行。我想删除所有数据值为空的所有行。

所以,基本上我做了什么。我做了很长的路。首先,我把整张桌子分成两张桌子。 df1 存储了我的基本信息(标签、描述、目标、部门),df2 存储了我的数据值。现在对于 df2,我使用了 isnull() 方法并找出哪个索引给了我空值。我记下了索引,并连接了两个表。连接后,我基本上根据我记下的索引删除了行。

df1 = pd.read_excel('***.xlsx',skiprows = 5)

df2 = df1.iloc[:,4:]

df2[df2.isnull().all(axis=1)] (*Used this to note down the index of null value rows*)

df1.drop(df1.iloc[:,4:],axis=1,inplace = True) (*Used this to get rid of the data value columns and only leave behind the essential information columns*)

new_df = pd.concat([df1,df2],axis = 1)

new_df.drop(new_df.index[[430,431,432]],inplace = True)

以下方法确实做到了。但是,我感觉它的路很长,所以我想知道是否有更短的方法来解决它? 非常感谢您的帮助

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果我理解正确,您正在寻找dropna

    df1.dropna(how='all', subset=df1.columns[4:])
    

    这指定您应该只删除从第 4 列开始全部为空值的行。

    编辑:由于您实际上想要删除所有值为 0 的行,因此您应该这样做:

    df1 = df1[~(df1.iloc[:, 4:] == 0).all(axis=1)]
    

    【讨论】:

    • 你好,我试过了,代码编译成功了。然而,它并没有真正设法放弃它。
    • @krijan 你把它分配给另一个变量了吗?这不会就地修改df1
    • 看看它不起作用的原因,是因为值为0。我的错误我说null不是0。它应该是0。那么有什么方法可以删除所有行所有值都为 0。?
    • 因为,我忘了说我把所有的 NaN 值都改成了 0。我真的很抱歉混淆了
    • ~ 表示“不”。在这种情况下,(df1.iloc[:, 4:] == 0).all(axis=1) 给出了所有全为零的行,但我们希望保留其余的行,因此我们使用 ~ 反转该条件。
    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多