Python DataFrame:如何删除填充了多个列的行?
我有一个dataframe,其中的列应该是伪列(对于每行,只应填充一列)。但是,数据中有一些“噪音”:某些行填充了多个列。我想放下这些行 假设DataFrame如以下示例所示:Python DataFrame:如何删除填充了多个列的行?,python,pandas,dataframe,data-cleaning,Python,Pandas,Dataframe,Data Cleaning,我有一个dataframe,其中的列应该是伪列(对于每行,只应填充一列)。但是,数据中有一些“噪音”:某些行填充了多个列。我想放下这些行 假设DataFrame如以下示例所示: a b c d 0 NaN 1 NaN NaN 1 1 2 3 4 2 1 1 NaN NaN 3 NaN NaN 1 NaN
a b c d
0 NaN 1 NaN NaN
1 1 2 3 4
2 1 1 NaN NaN
3 NaN NaN 1 NaN
4 1 NaN 1 NaN
因此,我的预期结果是删除行[1,2,4]。您可能会说,我只接受NaN值的数量等于列的数量的行-1
熊猫有什么方法可以做到这一点吗?使用:
df[(df.shape[1]-1)==(df.isna().sum(axis=1))]
这个能让你到达那里。您只需计算一行中空值的数量,并基于此对帧进行切片
df[df.notna().sum(axis=1) <= 1]
a b c d
0 NaN 1.0 NaN NaN
3 NaN NaN 1.0 NaN
df[df.notna().sum(axis=1)感谢以上!假设我的数据有更多的列,并且我只想删除基于上述列子集的行,你会怎么做?@Maciej如果我理解,你可以创建一个副本,m=df.loc[:,[interest_columns]].copy()
然后将代码中的df
替换为m
。谢谢,这是一个完美的解决方案,它还允许您根据数据框中的列子集删除行!
df[df.notna().sum(axis=1) <= 1]
a b c d
0 NaN 1.0 NaN NaN
3 NaN NaN 1.0 NaN