web-dev-qa-db-fra.com

Comment supprimer des lignes avec des valeurs NULL à partir de la kème colonne en python

J'ai besoin de supprimer toutes les lignes dans lesquelles les éléments de la colonne 3 et suivants sont tous 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

Dans l'exemple ci-dessus, mon cadre de données final ne comporterait pas les lignes «b» et «c». 

Comment utiliser df.dropna() dans ce cas?

33
user1140126

Vous pouvez appeler dropna avec les arguments subset et how:

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

Comme les noms l'indiquent:

  • how='all' exige que chaque colonne (de subset) de la ligne soit NaN pour pouvoir être supprimée, par opposition au 'any' par défaut.
  • subset sont ces colonnes à inspecter pour NaNs.

Comme le souligne @PaulH , nous pouvons généraliser pour supprimer les dernières colonnes k avec:

subset=df2.columns[k:]

En effet, nous pourrions même faire quelque chose de plus compliqué si vous le souhaitez:

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

Vous pouvez tester des cellules avec DataFrame.isna , calculer un masque booléen avec DataFrame.all(axis=1) , puis filtrer avec boolean indexing .

df2[~df2.loc[:, 'three':].isna().all(1)]

# Positional-slicing equivalent.
df2[~df2.iloc[:, 2:].isna().all(1)]

        one       two     three      four      five
a  0.379093  1.194776 -0.836876  0.631553  1.662682
c  0.140634  0.101367 -0.093608  0.580299 -0.176149
e  0.135007  0.017431 -1.859338 -0.116581 -0.829589
f -0.937245 -0.578815  0.038284 -0.408336 -0.049235
g  0.006024  0.284959 -1.171995 -0.241687 -0.425308
h  0.783125 -0.750952  1.159392  1.249044  0.175651

Une autre option consiste à tester la valeur de DataFrame.count(axis=1) pour qu’elle ne soit pas égale à 0:

df2[df2.iloc[:, 2:].count(1).ne(0)]

        one       two     three      four      five
a  0.379093  1.194776 -0.836876  0.631553  1.662682
c  0.140634  0.101367 -0.093608  0.580299 -0.176149
e  0.135007  0.017431 -1.859338 -0.116581 -0.829589
f -0.937245 -0.578815  0.038284 -0.408336 -0.049235
g  0.006024  0.284959 -1.171995 -0.241687 -0.425308
h  0.783125 -0.750952  1.159392  1.249044  0.175651
1
coldspeed