数据框条件筛选长列名列表

3
>>> df
     c1    c2 P1
0  10.0  20.0 1
1   NaN  40.0 2
2  50.0   NaN 3
3   NaN   NaN 4
4  60.0  70.0 5
5   NaN   NaN 6
>>>
>>>
>>> cols = ["c1" , "c2"]
>>>
>>> df[df[cols[0]].notnull() | df[cols[1]].notnull()]
     c1    c2 P1
0  10.0  20.0 1
1   NaN  40.0 2
2  50.0   NaN 3
4  60.0  70.0 5

如上所示,我正在执行一个逻辑,我想保留至少有一个非NaN值的行。

问题在于列表中可能有很多列,例如可能有100个或更多。那么如何以Pythonic的方式执行此逻辑呢?


如果 c2 中的第一个值是 NaN,会发生什么? - jezrael
1
@ jezrael 行不应该被删除。 - Bharat Sharma
2个回答

2

这应该可以工作:

df.dropna(subset=cols, how='all', inplace = True)

其中cols是您的:

cols = ["c1" , "c2"]

1

try this,

df=df.dropna(subset=[col],how='all')

我的数据框中可能有其他列,我不想根据逻辑删除它们。这个逻辑考虑到我在列表中分配的一些子集列。 - Bharat Sharma
@BharatSharma - 添加到 osolution 中。 - Mohamed Thasin ah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接