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

2024-04-29 10:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,尺寸为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中做到这一点


Tags: 数据尺寸nan例子cherrystc15c18
3条回答

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

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

说明:

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

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

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

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

要将其分配回原始df,可以执行以下操作:

In [2107]: ix = df.iloc[:, :5].dropna(how='all').index.tolist()

In [2110]: df = df.loc[ix]

In [2111]: df
Out[2111]: 
       LotName    C15    C16    C17    C18  C19  Spots15  Spots16
Cherry      St  439.0  464.0  555.0  239.0  420      101    101.0
Barton     Lot   34.0   24.0   43.0   45.0   39       10      9.0

可以使用iloc选择列,notna()选择notNaN,使用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 ...

另一种解决方案:在这里,您可以指定从C15C19的列,然后过滤掉所有包含任何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

相关问题 更多 >