Je peux utiliser la pandas
dropna()
fonctionnalité pour supprimer des lignes avec certaines ou toutes les colonnes définies comme NA
s. Existe-t-il une fonction équivalente pour supprimer des lignes avec toutes les colonnes ayant la valeur 0?
P kt b tt mky depth
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 1.1 3 4.5 2.3 9.0
Dans cet exemple, nous aimerions supprimer les 4 premières lignes du bloc de données.
Merci!
Réponses:
Il s'avère que cela peut être bien exprimé de manière vectorisée:
la source
df = df[(df.T != 0).any()]
rows with all columns having value 0
, mais on peut en déduire laall
méthode.Bon mot. Aucune transposition nécessaire:
Et pour ceux qui aiment la symétrie, cela fonctionne aussi ...
la source
df.loc[(df != 0).any(1)]
. Travail en équipe!axis=1
pour être explicite; plus pythonique à mon avisdf
df = df.loc[(df!=0).all(axis=1)]
etdf = df.loc[(df!=0).any(axis=1)]
supprimer des lignes avec des zéros comme ce serait l'équivalent réel de dropna ().Je recherche cette question environ une fois par mois et je dois toujours trouver la meilleure réponse dans les commentaires:
Merci Dan Allan!
la source
Remplacez les zéros par
nan
, puis supprimez les lignes avec toutes les entrées commenan
. Après cela, remplaceznan
par des zéros.la source
Je pense que cette solution est la plus courte:
la source
Quelques solutions que j'ai trouvées utiles lors de la recherche, en particulier pour les ensembles de données plus volumineux:
Poursuivant avec l'exemple de @ U2EF1:
Sur un ensemble de données plus grand:
la source
df[~(df.values.prod(axis=1) == 0) | ~(df.values.sum(axis=1)==0)]
bdf[np.square(bdf.values).sum(axis=1) != 0]
Résultat:
la source
ValueError: labels [True ... ] not contained in matrix
df = df.drop(temp)
utilisationdf = df.drop(df[temp].index)
Vous pouvez utiliser une
lambda
fonction rapide pour vérifier si toutes les valeurs d'une ligne donnée le sont0
. Ensuite, vous pouvez utiliser le résultat de l'application de celalambda
comme un moyen de choisir uniquement les lignes qui correspondent ou ne correspondent pas à cette condition:Rendements:
la source
Une autre alternative:
la source
Pour moi ce code:
df.loc[(df!=0).any(axis=0)]
n'a pas fonctionné. Il a renvoyé l'ensemble de données exact.Au lieu de cela, j'ai utilisé
df.loc[:, (df!=0).any(axis=0)]
et supprimé toutes les colonnes avec 0 valeurs dans l'ensemble de donnéesLa fonction a
.all()
supprimé toutes les colonnes dans lesquelles se trouvent des valeurs nulles dans mon ensemble de données.la source
Essayez cette commande, elle fonctionne parfaitement.
la source
Pour supprimer toutes les colonnes avec les valeurs 0 dans n'importe quelle ligne:
la source