假设我们有一个列为'Race', 'Age', 'Name'
的数据帧。我想创建两个2 DF:
1(在列'Race' and 'Age'
2(只有在列"种族"one_answers"年龄"中缺少值
我写了以下代码
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
列表?
如果选择多个列得到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:创建一个新的数据帧,删除丢失的数据(NaN、pd.NaT、None(,您可以过滤掉不完整的行。DataFrame.dropna删除包含至少一个缺少数据的字段的所有行
假设新的df为df_updated,更早的为df_Original
步骤2:现在我们的解决方案DF将是两个DF之间的差异。可以通过找到pd.concat([DF_Original,DF_updated](.drop_duplicates(keep=False(