【问题标题】:How to drop the rows if and only if values of particular columns are missing?当且仅当特定列的值丢失时如何删除行?
【发布时间】:2020-11-12 12:27:57
【问题描述】:

我需要通过删除特定的行或列来处理缺失值。我知道如何删除缺少值的列或行,但我需要的有点不同。当且仅当两个特定列缺少值时,我才需要删除行。

这是我尝试过的示例:

# Basic libraries
import os
import pandas as pd
import numpy as np

data_dict = {'First':[100, 90, np.nan, np.nan], 
        'Second': [30, 45, 56, np.nan], 
        'Third':[np.nan, 40, 80, np.nan],
        'Forth': [30,40,50,np.nan]}

df1 = pd.DataFrame(data_dict)
df1.dropna(subset=['First','Second'],inplace=True)
df1

如图所示,我正在尝试删除 First==NanSecond==Nan 所在的行。换句话说,我需要两个条件都是正确的。所以,我只需要删除最后一行,两个值都是 Nan。因此,由于满足其中一个条件,因此不会删除第 2 行。不幸的是,如果满足其中一个条件,我使用的命令会删除行。

【问题讨论】:

  • how="all" 传递给dropna 函数。
  • @Swier 感谢您的帮助,谢谢 :)

标签: python pandas numpy dataframe missing-data


【解决方案1】:

DataFrame.dropna 中使用how='all' 参数,因为默认值是how='any',所以你不工作:

方法:{'any', 'all'},默认'any'
当我们至少有一个 NA 或全部 NA 时,确定是否从 DataFrame 中删除行或列。
'any' :如果存在任何 NA 值,则删除该行或列。
'all' :如果所有值都是 NA,则删除该行或列。

df1.dropna(subset=['First','Second'],inplace=True, how='all')
print (df1)
   First  Second  Third  Forth
0  100.0    30.0    NaN   30.0
1   90.0    45.0   40.0   40.0
2    NaN    56.0   80.0   50.0

编辑:对于传递变量列表使用:

list_columns = ['First','Second','Third','Forth']
df1.dropna(subset=list_columns,inplace=True, how='all')

【讨论】:

  • 非常感谢。它工作得很好,但是将list of columns 传递给子集呢?即list_columns = ['First','Second','Third','Forth'] df1.dropna(subset=[list_columns],inplace=True, how='all')
  • @QaddomiObaid - 从[list_columns] 中删除[] 并使用df1.dropna(subset=list_columns,inplace=True, how='all')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2014-09-11
  • 2016-05-01
相关资源
最近更新 更多