熊猫选择多列中缺少值的行

时间:2020-04-19 07:22:17

标签: python pandas

假设我们有一个包含'Race', 'Age', 'Name'列的数据框。我想创建两个2 DF:
1)'Race' and 'Age'列中没有缺失值
2)仅在“种族”和“年龄”列中缺少值

我写了以下代码

first_df = df[df[columns].notnull()]
second_df= df[df[columns].isnull()]

但是此代码不起作用。我用这段代码解决了这个问题

first_df= df[df['Race'].isnull() & df['Age'].isnull()]
second_df = df[df['Race'].isnull() & df['Age'].isnull()]

但是如果有10列怎么办?有没有一种方法可以仅使用columns列表来编写没有逻辑运算符的代码?

2 个答案:

答案 0 :(得分:2)

如果选择多列会得到boolean DataFrame,则有必要通过DataFrame.all测试所有列是否为True,或者通过DataFrame.any测试每行是否至少有True:

first_df = df[df[columns].notnull().all(axis=1)]
second_df= df[df[columns].isnull().all(axis=1)]

您还可以使用~来反转掩码:

mask = df[columns].notnull().all(axis=1)
first_df = df[mask]
second_df= df[~mask]

答案 1 :(得分:1)

第1步:新建一个删除了丢失数据的数据框(NaN,pd.NaT,无),您可以过滤掉不完整的行。 DataFrame.dropna删除包含至少一个字段且数据缺失的所有行

将新df假定为DF_updated,更早的名称为DF_Original

第2步:现在,我们的解决方案DF将是两个DF之间的差异。可以找到 pd.concat([DF_Original,DF_updated])。drop_duplicates(keep = False)