web-dev-qa-db-fra.com

Python Pandas Dataframe, supprime toutes les lignes où "Aucun" n'est la valeur d'une colonne).

J'ai une grande base de données. Quand il a été créé, "Aucun" a été utilisé comme valeur pour laquelle un nombre ne peut pas être calculé (au lieu de "nan")

Comment puis-je supprimer toutes les lignes comportant "Aucune" dans l'une de ses colonnes? Je pensais pouvoir utiliser df.dropna et définissez la valeur de na, mais je ne semble pas pouvoir le faire.

Merci

Je pense que ceci est une bonne représentation du dataframe:

temp = pd.DataFrame(data=[['str1','str2',2,3,5,6,76,8],['str3','str4',2,3,'None',6,76,8]])
14
jlt199

Configuration
Emprunté @ MaxU's df

df = pd.DataFrame([
    [1, 2, 3],
    [4, None, 6],
    [None, 7, 8],
    [9, 10, 11]
], dtype=object)

Solution
Vous pouvez simplement utiliser pd.DataFrame.dropna tel quel

df.dropna()

   0   1   2
0  1   2   3
3  9  10  11

Supposons que vous ayez None chaînes comme dans cette df

df = pd.DataFrame([
    [1, 2, 3],
    [4, 'None', 6],
    ['None', 7, 8],
    [9, 10, 11]
], dtype=object)

Puis combinez dropna avec mask

df.mask(df.eq('None')).dropna()

   0   1   2
0  1   2   3
3  9  10  11

Vous pouvez vous assurer que l'ensemble du cadre de données est object lorsque vous comparez.

df.mask(df.astype(object).eq('None')).dropna()

   0   1   2
0  1   2   3
3  9  10  11
17
piRSquared

Merci pour votre aide. En fin de compte j'ai pu obtenir

df = df.replace(to_replace='None', value=np.nan).dropna()

travailler. Je ne sais pas pourquoi vos suggestions n'ont pas fonctionné pour moi.

10
jlt199

UPDATE:

In [70]: temp[temp.astype(str).ne('None').all(1)]
Out[70]:
      0     1  2  3  4  5   6  7
0  str1  str2  2  3  5  6  76  8

Ancienne réponse:

In [35]: x
Out[35]:
      a     b   c
0     1     2   3
1     4  None   6
2  None     7   8
3     9    10  11

In [36]: x = x[~x.astype(str).eq('None').any(1)]

In [37]: x
Out[37]:
   a   b   c
0  1   2   3
3  9  10  11

ou variante plus agréable de @roganjosh :

In [47]: x = x[x.astype(str).ne('None').all(1)]

In [48]: x
Out[48]:
   a   b   c
0  1   2   3
3  9  10  11
5
MaxU