J'essaie de remplacer les points d'interrogation dans mon ensemble de données par np.nan:
J'ai essayé d'utiliser le code suivant:
df['Workclass'] = df['Workclass'].replace(to_replace =['?'], value = np.nan, regex = True)
Et ceci: p >
df['Workclass'] = df['Workclass'].map(lambda x: np.nan if x=="?" else x)
Et ceci:
df['Workclass'] = [row if row!='?' else np.nan for row in df['Workclass']]
Mais aucune de ces solutions ne semble changer la fréquence des points d'interrogation dans la colonne. p >
3 Réponses :
Essayez ceci:
df['Workclass'].apply(lambda x: np.nan if str(x).find('?')>-1 else x)
et si cela fonctionne:
df['Workclass'] = df['Workclass'].apply(lambda x: np.nan if x == '?' else x)
si vous recherchez "?" n'importe où dans une chaîne, vous pouvez utiliser ceci:
df['Workclass'].apply(lambda x: np.nan if x == '?' else x)
@jezrael comment ça ne marche pas, je l'ai testé avant de répondre.
Je pense qu'il y a un problème lié aux données, car chacune de vos solutions devrait fonctionner correctement.
Vous pouvez donc tester l'apparence des données avec ?
dans la colonne Workclass
:
df['Workclass'] = df['Workclass'].mask(df['Workclass'].str.strip() == "?")
Ou si numérique avec des chaînes:
df['Workclass'] = df['Workclass'].str.strip().map(lambda x: np.nan if x=="?" else x)
Le problème devrait être quelques espaces, vous pouvez essayer:
print (df.loc[df['Workclass'].astype(str).str.contains('?', regex=False), 'Workclass'].tolist())
Ou mieux:
print (df.loc[df['Workclass'].str.contains('?', regex=False), 'Workclass'].tolist())
Il existe une approche plus directe:
df.replace('?',np.NaN)
Murtaza, essayez peut-être ceci au cas où il y aurait un espace ou quelque chose de plus dans les colonnes avec ce '?': Df ['Workclass']. Apply (lambda x: np.nan if str (x) .find ('?')> -1 else x) Il semble qu'il y ait peut-être un problème de données
Pouvez-vous tester
df ['Workclass'] = df ['Workclass']. Str.strip (). Map (lambda x: np.nan if x == "?" Else x)
?donc ma solution ci-dessus fonctionne?