J'ai du mal à découper mon bloc de données pivoté afin d'obtenir des résultats au-dessus d'un certain seuil. J'essaie de filtrer les résultats inférieurs à une valeur minimale. Mon bloc de données ressemble à ceci:
Qty Index Store_Nbr 201712 201801 201802 201803 201804 201805 201806 201807 201808 0 NaN NaN 275 293 256 313 421 493 291 385 1 NaN 147 316 343 416 361 483 438 136 461 2 NaN 266 370 162 346 451 414 296 478 295 3 NaN NaN 179 353 241 370 247 423 391 194 4 NaN 389 480 450 102 482 137 251 153 153 ... ... ... ... ... ... ... ... ... ... ... 30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 32 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 33 NaN NaN 311 151 488 135 239 212 104 122 34 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Après avoir utilisé godzilla = godzilla [godzilla ['Qty']> 150]
j'obtiens le bloc de données ci-dessous où il a été converti tous les zéro à nuls et n'a rien filtré.
Qty Index Store_Nbr 201712 201801 201802 201803 201804 201805 201806 201807 201808 0 1 356 275 293 256 313 421 493 291 385 1 2 147 316 343 416 361 483 438 136 461 2 3 266 370 162 346 451 414 296 478 295 3 4 322 179 353 241 370 247 423 391 194 4 5 249 389 480 450 102 482 137 251 153 ... ... ... ... ... ... ... ... ... ... ... 30 30 0 0 0 0 0 0 0 0 0 31 31 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 0 0 0 0 33 33 392 311 151 488 135 239 212 104 122 34 34 0 0 0 0 0 0 0 0 -1
J'ai essayé de faire godzilla.dropna (axis = 0, inplace = True, how = 'any')
qui renvoie un dataframe vide et godzilla = godzilla.dropna (subset = godzilla ['Qty'])
qui renvoie une KeyError: 'Qty'. Je suis déconcerté qu'il convertisse les zéros en null et pourquoi la tranche ne fonctionne pas. Des mots de sagesse lorsque vous essayez de filtrer / découper des données pivotées?
Remarque ** Que j'ai plus de Qté pivoté dans le bloc de données.
3 Réponses :
Tout d'abord, vous remplacez toute valeur inférieure à 150 par Aucune.
Ensuite, vous devez filtrer la ligne avec au moins 1 valeur None comme décrit dans cette réponse
Cela devrait faire l'affaire:
# replaces every value of the DataFrame lower than 150 with None godzilla = pd.DataFrame([ [x if not isinstance(x, (int, float)) or x >= 150 else None for x in j ] for j in godzilla.as_matrix()]) # replaces every value of the Column "Qty" lower than 150 with None df["Qty"] = [x if not isinstance(x, (int, float)) or x >= 20 else None for x in df["Qty"] #dropna will drop all rows with at least 1 null value df = df.dropna(how='any',axis=0)
Cela ne fonctionne pas. Si je pouvais faire fonctionner la tranche en premier lieu, ce serait optimal.
Récupérer cet objet 'TypeError:' method 'object is not iterable'
Qu'est-ce que tu as fait exactement?
Oui! Vous travaillez avec une structure hiérarchique, multiindex. C'est pourquoi les colonnes ne sont pas supprimées, mais remplacées par NaN
. S'il n'y a pas d'autre index que Qty
, vous pouvez utiliser:
godzilla = godzilla.dropna(how='any',axis=0)
Et puis suivez-le avec dropna ()
: p>
godzilla.columns = godzilla.columns.droplevel()
J'ai un bloc de données vide sans valeurs. @ Celius, quelle est la bonne façon de découper le dataframe hiérarchique afin que je puisse filtrer les 0 pour commencer?
Ils fonctionnent comme des tuples, donc votre index est ('Qty', 'Store_Nbr'), ('Qty', '201712'), ('Qty', '201801') et ainsi de suite ...
Cela a du sens car toutes les lignes de Store_Nbr
sont nulles, c'est-à-dire qu'elles ne remplissent pas la condition. Vous devriez envisager de le laisser tomber avant d'utiliser le dropna (how = 'any', axis = 0 ')
J'ai enfin compris. Désolé pour le retard. Appréciez les réponses que vous proposez tous. L'erreur était complètement de ma part. Plus tôt dans le code, j'avais utilisé .drop_index ()
car je ne savais pas à l'époque que je pouvais manipuler l'index en utilisant .index
. Après avoir corrigé le code, je n'ai eu aucun problème à définir les paramètres en utilisant godzilla = godzilla [godzilla ['Qty']> 150] .dropna ()
.
que voulez-vous faire lorsqu'une ligne n'a pas toutes les colonnes comme nulles?
Si une ligne a même une valeur nulle, je veux l'exclure.
Je pense qu'une idée de l'ensemble du pivot incluant d'autres choses que "Qty" serait utile - en fait, essayer de créer une trame de données factice et d'y appliquer des solutions, trouve souvent le problème.