python-2.7 - 我应该如何检查超过 10 列的 nan 值并选择那些具有 nan 值的行,即 keepna() 而不是 dropna()

标签 python-2.7 pandas

Output = df[df['TELF1'].isnull() | df['STCEG'].isnull() | df['STCE1'].isnull()]

这是我的代码,如果列包含 nan 值而不是只选择该行,我将在此处检查。但在这里我有 10 多个专栏可以做到这一点。这将使我的代码变得庞大。有没有更短或更 pythonic 的方法来做到这一点。

df.dropna(subset=['STRAS','ORT01','LAND1','PSTLZ','STCD1','STCD2','STCEG','TELF1','BANKS','BANKL','BANKN','E-MailAddress'])

有什么方法可以得到与上述命令相反的结果。它会给我与我在上面尝试的相同的输出,但它变得很长。

最佳答案

loc 与简单的 bool 过滤器一起使用应该可以:

df = pd.DataFrame(np.random.random((5,4)), columns=list('ABCD'))
subset = ['C', 'D']
df.at[0, 'C'] = None
df.at[4, 'D'] = None
>>> df
          A         B         C         D
0  0.985707  0.806581       NaN  0.373860
1  0.232316  0.321614  0.606824  0.439349
2  0.956236  0.169002  0.989045  0.118812
3  0.329509  0.644687  0.034827  0.637731
4  0.980271  0.001098  0.918052       NaN

>>> df.loc[df[subset].isnull().any(axis=1), :]
          A         B         C        D
0  0.985707  0.806581       NaN  0.37386
4  0.980271  0.001098  0.918052      NaN

df[subset].isnull() 返回是否有任何子集列具有 NaN 的 bool 值。

>>> df[subset].isnull()
       C      D
0   True  False
1  False  False
2  False  False
3  False  False
4  False   True

.any(axis=1) 将返回 True 如果行中的任何值(因为 axis=1,否则列)为 True。

>>> df[subset].isnull().any(axis=1)
0     True
1    False
2    False
3    False
4     True
dtype: bool

最后,使用loc(行,列)定位满足 bool 条件的行。 : 符号表示选择所有内容,因此它选择第 0 行和第 4 行的所有列。

关于python-2.7 - 我应该如何检查超过 10 列的 nan 值并选择那些具有 nan 值的行,即 keepna() 而不是 dropna(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118600/

相关文章:

python - 取每一行值并在 Pandas 中创建一列

python - 尽管有 'to_hdf',但用 pandas 'index=None' 重复索引

python - 在 python 中将图像划分为 5x5 block 并计算每个 block 的直方图

python-2.7 - 如何从网页中抓取隐藏文本?

python - 无法理解代码行为 - python

python - 如何使用 Python 和 Flask 实现每秒更新一次的时钟?

python - 使用 MultiIndex 创建 DataFrame

python - 什么是西格玛裁剪?你怎么知道什么时候应用它?

python - 如何正确转义python子进程中的特殊字符?

python - 将注释的列名称读取到 pandas 中