J'ai une feuille Excel avec 20000 lignes et 5 colonnes. Cette trame de données contient plusieurs valeurs -9. Je souhaite supprimer ces -9 sans remplacer aucune autre valeur à leur place.
Voici l'exemple de dataframe:
a b c 1 3 -9 -9 2 8 5 -9 -9 -9 0 2
J'ai besoin d'un data frame qui ressemble à ce qui suit :
abc
1 3
2 8
5
0 2
Ce qui suit fait partie du fichier de sortie:
23799 1
11 1,000000 0,1 0,133 1 0,867 0,5 0
23800 2
2 0,100000 0,1 0,133 1 0,867 0,5 0
11 0,900000 0,1 0,133 1 0,867 0,5 0
23801 2
2 0,200000 0,1 0,133 1 0,867 0,5 0
11 0,800000 0,1 0,133 1 0,867 0,5 0
23802 2
2 0,200000 0,1 0,133 1 0,867 0,5 0
11 0,800000 0,1 0,133 1 0,867 0,5 0
23803 3
2 0,600000 0,1 0,133 1 0,867 0,5 0
10 0,100000 0,1 0,173 1 0,827 0,5 0
11 0,300000 0,1 0,133 1 0,867 0,5 0
23804 2
2 0,400000 0,1 0,133 1 0,867 0,5 0
11 0,600000 0,1 0,133 1 0,867 0,5 0
23805 2
2 0,500000 0,1 0,133 1 0,867 0,5 0
11 0,500000 0,1 0,133 1 0,867 0,5 0
23806 3
5 0,100000 0,1 0,1 1 0,9 0,5 0
9 0,400000 0,1 0,089 1 0,889 0,5 0,022
11 0,500000 0,1 0,133 1 0,867 0,5 0
23807 2
5 0,400000 0,1 0,1 1 0,9 0,5 0
9 0,600000 0,1 0,089 1 0,889 0,5 0,022
23808 2
5 0,200000 0,1 0,1 1 0,9 0,5 0
9 0,800000 0,1 0,089 1 0,889 0,5 0,022
3 Réponses :
Je pense que vous avez besoin de toutes les lignes avec au moins une valeur -9 - filtrez par indexation booléenne :
df1 = df.melt(var_name='A', value_name='B')
df1 = df1[df1['B'] != -9]
print (df1)
A B
0 a 1
2 a 5
4 b 3
5 b 2
7 b 0
9 c 8
11 c 2
Détail : p>
Vérifiez si les valeurs ne sont pas égales à -9:
print (df.replace(-9, np.nan))
a b
0 1.0 3.0
1 NaN 2.0
2 5.0 NaN
3 NaN NaN
Vérifiez si tous les Trues par lignes:
print (df.ne(-9).all(axis=1)) 0 True 1 False 2 False 3 False dtype: bool
Remplacer par rien n'est pas possible, doit être remplacé par 0 ou NaN ou une valeur:
print (df.ne(-9))
a b
0 True True
1 False True
2 True False
3 False False
Uniquement méthode est remodeler - créez 2 colonnes avec toutes les valeurs numériques dans une colonne par fondre :
df = df[df.ne(-9).all(axis=1)] print (df) a b 0 1 3
Je viens de modifier le que. les pls voient cela. Je veux supprimer -9 de la feuille Excel mais je ne veux pas non plus le remplacer par un espace
@ lsr729 - C'est impossible, il faut le remplacer par une valeur comme 0 ou NaN ou un espace.
J'ai besoin de ce fichier en .txt comme entrée de modèle, ce modèle lit un espace en tant que valeur et donne une erreur.
@ lsr729 - Pouvez-vous être précis? Parce que si vous utilisez une méthode de scipy , cela ne fonctionne évidemment pas avec des valeurs ou des chaînes manquantes, alors remplacer par NaN ou un espace ou une chaîne n'est pas une bonne idée. Vous devez supprimer ces lignes ou remplacer par numérique.
Je ne veux pas supprimer les lignes mais les cellules avec une valeur de -9. existe-t-il un moyen de supprimer les valeurs -9 sans remplacer par autre chose?
@ lsr729 - Si besoin de 5 colonnes et 20000 lignes pas.
@ lsr729 - a ajouté une solution, mais a besoin de remodeler les données - format différent des lignes et des colonnes comme l'original.
Des commentaires à la réponse de @ jezrael, il semble que vous souhaitiez exporter le résultat sous forme de fichier texte (par exemple, csv ou tsv). Puisque vous n'avez pas l'intention de travailler avec le dataframe dans les pandas, j'utiliserais un simple replace.
a,b,c 1,3, ,2,8 5,, ,0,2
Le csv exporté ressemble à ceci:
df = pd.DataFrame(
[[1, 3, -9], [-9, 2, 8], [5, -9, -9], [-9, 0, 2]],
columns=("a", "b", "c"),
)
df.replace(to_replace=-9, value='')
.to_csv('/tmp/foo.csv', index=False)
@jezrael citant un commentaire de l'OP: "J'ai besoin de ce fichier en .txt comme entrée de modèle, ce modèle lit un espace comme valeur et donne une erreur."
@suvayuI cela ne résout pas le problème: (J'en ai besoin sans espace
Il n'y a aucun espace ! Peut-être que tu veux dire autre chose? Pourriez-vous s'il vous plaît modifier la question et donner un exemple de la façon dont vous en avez besoin? Pas le dataframe, mais le fichier de sortie.
J'ai édité la question et mis une partie du fichier de sortie.
Une autre façon de faire cela avec l'indexation booléenne:
>>> df.replace(-9, np.nan).fillna('')
a b c
0 1 3
1 2 8
2 5
3 0 2
>>> df[df < 0] = '' >>> df a b c 0 1 3 1 2 8 2 5 3 0 2
Deuxièmement, comme d'autres ont déjà inclus la méthode de remplacement, Cependant, je voudrais ajouter des éléments supplémentaires pour obtenir le résultat souhaité, convertissez d'abord votre nombre négatif en Nan et remplissez en même temps les valeurs Nan avec '' à obtenir le résultat souhaité:
>>> df a b c 0 1 3 -9 1 -9 2 8 2 5 -9 -9 3 -9 0 2
Je suis surpris que le remplacement par np.nan ne convertisse pas les colonnes en float . Sont-ils plutôt convertis en objet ?
La manière dont le contenu du dataframe correspond au fichier de sortie que vous avez cité n'est pas claire. Pourriez-vous s'il vous plaît ajouter quelques explications? Par exemple, votre exemple de dataframe ne contient que des entiers, mais le fichier de sortie est plein de flottants, les lignes semblent également être groupées. Il est difficile de comprendre comment la trame de données se rapporte à cette sortie.