Python 删除前五列中的行(如果为NaN)

Python 删除前五列中的行(如果为NaN),python,python-3.x,pandas,nan,data-cleaning,Python,Python 3.x,Pandas,Nan,Data Cleaning,我有一个熊猫数据框,尺寸为89行13列。如果NaN出现在前五列中,我想删除整个行。这里有一个例子 LotName C15 C16 C17 C18 C19 Spots15 Spots16 ... Cherry St 439 464 555 239 420 101 101 ... Springhurst NaN NaN NaN NaN NaN 12 12 Barton Lot 34 24 43 45

我有一个熊猫数据框,尺寸为89行13列。如果
NaN
出现在前五列中,我想删除整个行。这里有一个例子

LotName     C15   C16  C17  C18  C19 Spots15 Spots16 ...
Cherry St   439   464  555  239  420     101     101 ...
Springhurst NaN   NaN  NaN  NaN  NaN      12      12
Barton Lot   34    24   43   45   39      10       9 ...

在上面的例子中,我想删除Springhurst观测值,因为它在前五列中包含
NaN
。在Python中如何才能做到这一点?

您可以使用
iloc
来选择列,
notna()
用于not
NaN
,以及
any
来检查所选列/行中的任何值是否为真

mask = df.iloc[:,:5].notna().any(axis=1)
df[mask]
输出:

              C15    C16    C17    C18    C19  Spots15 Spots16 ...
LotName                                                           
Cherry St   439.0  464.0  555.0  239.0  420.0      101     101 ...
Barton Lot   34.0   24.0   43.0   45.0   39.0       10       9 ...

如果要严格检查前5列所有行中的
Nan

df.iloc[:, :5].dropna(how='all')
df.iloc[:, :5].dropna(how='any')
说明:

df.iloc[:,:5]
:选择所有行和前5列

.dropna(how='all')
:检查一行中的所有值是否都是
NaN

如果要在5列中的任何一列中检查
Nan

df.iloc[:, :5].dropna(how='all')
df.iloc[:, :5].dropna(how='any')
要将其分配回原始df,可以执行以下操作:
另一种解决方案:您可以在这里指定列,从
C15
C19
,然后过滤掉所有包含任何NaN的行:

print( df[~df.loc[:, 'C15':'C19'].isna().any(axis=1)] )
印刷品:

      LotName    C15    C16    C17    C18    C19  Spots15  Spots16
0   Cherry St  439.0  464.0  555.0  239.0  420.0      101      101
2  Barton Lot   34.0   24.0   43.0   45.0   39.0       10        9

这个语句会从原始数据帧中删除行吗?@Bill我已经更新了我的答案,从原始数据帧中删除行。请看一看。