J'appelle cette ligne:
lang_modifiers = [keyw.strip() for keyw in row["language_modifiers"].split("|") if not isinstance(row["language_modifiers"], float)]
Cela semble fonctionner lorsque row["language_modifiers"]
Est un mot (atlas method
, central
), mais pas lorsqu'il apparaît sous la forme nan
.
Je pensais que ma if not isinstance(row["language_modifiers"], float)
pourrait rattraper le temps où les choses se présentent comme nan
mais pas le cas.
Contexte: row["language_modifiers"]
Est une cellule dans un fichier tsv et apparaît comme nan
lorsque cette cellule était vide dans le tsv en cours d'analyse.
Vous avez raison, ces erreurs sont principalement causées par NaN représentant des cellules vides. Il est courant de filtrer ces données, avant d'appliquer vos autres opérations, en utilisant cet idiome sur votre dataframe df:
df_new = df[df['ColumnName'].notnull()]
Alternativement, il peut être plus pratique d'utiliser la méthode fillna()
pour imputer (pour remplacer) null
les valeurs avec quelque chose par défaut. Par exemple. tous les null
ou NaN
peuvent être remplacés par la valeur moyenne de sa colonne
housing['LotArea'] = housing['LotArea'].fillna(housing.mean()['LotArea'])
ou peut être remplacé par une valeur comme une chaîne vide "" ou une autre valeur par défaut
housing['GarageCond']=housing['GarageCond'].fillna("")
Vous pouvez également utiliser df = df.dropna(thresh=n)
où n
est la tolérance. Cela signifie qu'il faut n des valeurs non NA pour ne pas supprimer la ligne
Attention, cette approche supprimera la ligne
Par exemple: si vous avez une trame de données avec 5 colonnes, df.dropna(thresh=5)
supprimera toute ligne qui n'a pas 5 valeurs valides ou non Na.
Dans votre cas, vous ne souhaiterez peut-être conserver que des lignes valides; si c'est le cas, vous pouvez définir le seuil sur le nombre de colonnes dont vous disposez.