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

标签 python pandas dataframe drop

我有一个通过解析一些 Excel 电子表格创建的 pd.DataFrame。其中一列有空单元格。例如,下面是该列频率的输出,32320 条记录缺少租户值。

>>> 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 对象,Pandas 会将其识别为 null,该对象将在 DataFrame 中打印为 NaN。您的缺失值可能是空字符串,Pandas 不会将其识别为 null。要解决此问题,您可以使用 replace() 将空字符串(或空单元格中的任何内容)转换为 np.nan 对象,然后调用 dropna ()在您的 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         

现在我们用 np.nan 对象替换 Tenants 列中的所有空字符串,如下所示:

>>> 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

关于python - 从 pandas DataFrame 中删除包含空单元格的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708504/

相关文章:

python - 在 Python 中转换和附加 DataFrame

Python:嵌套的 'for' 循环

python - 如何使导入/关闭从 IPython 的嵌入工作?

python - pandas DataFrame 中每组的最大日期

python - 如何将 lambda 函数应用于 pandas 数据框中的时间戳列

r - 使用 R 获得前一年和明年的天数的优雅方法?

python - CSV 中的 EM Dash 导致 Pandas 出现问题

python - 处理 REST API 的不同响应数据类型

python - 如何检查列中的所有值是否满足 Data Frame 中的条件?

python - 如何获取pandas中两个日期之间的工作日数