如何在python中从第k列向前删除具有空值的行

use*_*126 33 python pandas

我需要删除所有行,其中第3列以后的元素都是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
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我的最终数据框不会有行'b'和'c'.

df.dropna()在这种情况下如何使用?

And*_*den 72

你可以调用dropna带参数的subsethow:

df2.dropna(subset=['three', 'four', 'five'], how='all')
Run Code Online (Sandbox Code Playgroud)

顾名思义:

  • how='all'要求删除subset行中的每列(of )NaN,而不是默认值'any'.
  • subset是那些要检查NaNs的列.

正如@PaulH指出的那样,我们可以概括地删除最后一k列:

subset=df2.columns[k:]
Run Code Online (Sandbox Code Playgroud)

实际上,如果需要,我们甚至可以做更复杂的事情:

subset=filter(lambda x: len(x) > 3, df2.columns)
Run Code Online (Sandbox Code Playgroud)

  • 也许`df2.dropna(subset = df2.columns [k:],how ='all')`?(只是为了更一般) (13认同)