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]])
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
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.
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