web-dev-qa-db-fra.com

AttributeError: l'objet 'float' n'a pas d'attribut 'split'

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.

10
Dhruv Ghulati

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("")
24
Ozgur Ozturk

Vous pouvez également utiliser df = df.dropna(thresh=n)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.

documentation pandas sur dropna

0
hpl002