【问题标题】:Remove columns that have NA values for rows - Python删除行的 NA 值的列 - Python
【发布时间】:2016-07-10 00:45:33
【问题描述】:

假设我有一个如下的数据框,

import pandas as pd

columns=['A','B','C','D', 'E', 'F']
index=['1','2','3','4','5','6']
df = pd.DataFrame(columns=columns,index=index)
df['D']['1'] = 1
df['E'] = 1
df['F']['1'] = 1
df['A']['2'] = 1
df['B']['3'] = 1
df['C']['4'] = 1
df['A']['5'] = 1
df['B']['5'] = 1
df['C']['5'] = 1
df['D']['6'] = 1
df['F']['6'] = 1
df

    A   B   C   D   E   F
1   NaN NaN NaN 1   1   1
2   1   NaN NaN NaN 1   NaN
3   NaN 1   NaN NaN 1   NaN
4   NaN NaN 1   NaN 1   NaN
5   1   1   1   NaN 1   NaN
6   NaN NaN NaN 1   1   1

我的条件是,我想删除仅当 A、B、C(together) 没有值时才具有值的列。我想找出哪一列与 A、B、C 列相互排斥。我有兴趣找到仅当 A 或 B 或 C 具有值时才具有值的列。这里的输出将是删除 D、F 列。但是我的数据框有 400 列,我想要一种方法来检查 A、B、C 与其余列的对比。

我能想到的一种方法是,

从 A,B,C 中删除 NA 行

df = df[np.isfinite(df['A'])]
df = df[np.isfinite(df['B'])]
df = df[np.isfinite(df['C'])]

并获取所有列的 NA 计数并检查总行数,

df.isnull().sum()

并删除匹配的计数。

有没有更好更有效的方法来做到这一点?

谢谢

【问题讨论】:

    标签: python python-2.7 numpy data-cleaning


    【解决方案1】:

    不删除行,只选择A、B、C不等于NaN的其他行。

    mask = df[["A", "B", "C"]].isnull().all(axis=1)
    df = df[~mask]
    

    【讨论】:

    • 我想删除相应的列。我们能找到一种方法吗?
    • 你能在描述中添加你想要的结果吗?
    猜你喜欢
    • 2016-08-20
    • 2018-10-21
    • 2022-06-13
    • 2016-07-10
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多