假设我们有一个包含'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
列表来编写没有逻辑运算符的代码?
答案 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)