从pandas DataFrame删除包含空单元格的行


问题内容

我有一个pd.DataFrame通过解析一些excel电子表格创建的。一列的单元格为空。例如,以下是该列的频率输出,32320条记录的 Tenant
值缺失。

>>> value_counts(Tenant, normalize=False)
                              32320
    Thunderhead                8170
    Big Data Others            5700
    Cloud Cruiser              5700
    Partnerpedia               5700
    Comcast                    5700
    SDP                        5700
    Agora                      5700
    dtype: int64

我正在尝试删除缺少租户的行,但是该.isnull()选项无法识别丢失的值。

>>> df['Tenant'].isnull().sum()
    0

该列的数据类型为“对象”。在这种情况下会发生什么?如何在 租户 丢失的地方删除记录?


问题答案:

如果熊猫是一个np.nan对象,它将识别为空值,该值将NaN在DataFrame中打印。您缺少的值可能是空字符串,Pandas无法将其识别为null。要解决此问题,您可以使用将空字符串(或空单元格中的任何东西)转换为np.nan对象replace(),然后调用dropna()DataFrame删除具有空租户的行。

为了说明这一点,我们创建了一个DataFrame,该DataFrame在Tenants列中包含一些随机值和一些空字符串:

>>> import pandas as pd
>>> import numpy as np
>>> 
>>> df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
>>> df['Tenant'] = np.random.choice(['Babar', 'Rataxes', ''], 10)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
1 -0.008562  0.725239         
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
4  0.805304 -0.834214         
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes
9  0.066946  0.375640

现在,我们Tenantsnp.nan对象替换列中的任何空字符串,如下所示:

>>> df['Tenant'].replace('', np.nan, inplace=True)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
1 -0.008562  0.725239      NaN
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
4  0.805304 -0.834214      NaN
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes
9  0.066946  0.375640      NaN

现在我们可以删除空值:

>>> df.dropna(subset=['Tenant'], inplace=True)
>>> print df

          A         B   Tenant
0 -0.588412 -1.179306    Babar
2  0.282146  0.421721  Rataxes
3  0.627611 -0.661126    Babar
5 -0.514568  1.890647    Babar
6 -1.188436  0.294792  Rataxes
7  1.471766 -0.267807    Babar
8 -1.730745  1.358165  Rataxes