选择列列表中至少一个值不为null的行


问题内容

我有一个包含许多列(例如1000)的大数据框。我有一个列列表(由脚本〜10生成)。我想选择原始数据框中至少其中一个列列表不为空的所有行。

因此,如果我可以提前知道列数,则可以执行以下操作:

list_of_cols = ['col1', ...]
df[
  df[list_of_cols[0]].notnull() |
  df[list_of_cols[1]].notnull() |
  ...
  df[list_of_cols[6]].notnull() |
]

我还可以遍历cols列表并创建一个遮罩,然后将其应用于df,但是他的外观过于繁琐。知道熊猫在与nan打交道方面有多么强大,我希望有一种更简单的方法可以实现我想要的目标。


问题答案:

threshdropna()方法中使用参数。通过设置thresh=1,您可以指定如果至少有1个非null的项目,请不要删除它。

df = pd.DataFrame(np.random.choice((1., np.nan), (1000, 1000), p=(.3, .7)))
list_of_cols = list(range(10))

df[list_of_cols].dropna(thresh=1).head()

在此处输入图片说明