当且仅当特定列的值丢失时,如何删除行



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

以下是我尝试过的例子:

# 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行。不幸的是,如果满足其中一个条件,我使用的命令就会删除行。

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

how:{'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')

相关内容

最新更新