如何在Python中删除从第k列开始的空值行

35 投票
1 回答
52717 浏览
提问于 2025-04-17 16:33

我需要删除所有从第三列开始的元素都是NaN(缺失值)的行。

df = DataFrame(np.random.randn(6, 5), index=['a', 'c', 'e', 'f', 'g','h'], columns=['one', 'two', 'three', 'four', 'five'])

df2 = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
df2.ix[1][0] = 111
df2.ix[1][1] = 222

在上面的例子中,我最终的数据表中不会有'b'和'c'这两行。

在这种情况下,怎么使用 df.dropna() 呢?

1 个回答

76

你可以使用dropna这个函数,并传入参数subsethow

df2.dropna(subset=['three', 'four', 'five'], how='all')

从名字上看:

  • how='all'表示只有当这一行的所有指定列(subset里的列)都是NaN(也就是空值)时,这一行才会被删除,而默认的'any'是只要有一列是NaN就会删除这一行。
  • subset是你想要检查哪些列是否有NaN的地方。

正如@PaulH所提到的,我们可以扩展这个功能来删除最后k列,方法是:

subset=df2.columns[k:]

其实,如果需要的话,我们甚至可以做一些更复杂的操作:

subset=filter(lambda x: len(x) > 3, df2.columns)

撰写回答