web-dev-qa-db-ja.com

AttributeError: 'float'オブジェクトには属性 'split'がありません

私はこの行を呼んでいます:

_lang_modifiers = [keyw.strip() for keyw in row["language_modifiers"].split("|") if not isinstance(row["language_modifiers"], float)]
_

これは、_row["language_modifiers"]_がWord(_atlas method_、central)の場合に動作するようですが、nanとして表示される場合は動作しません。

私はif not isinstance(row["language_modifiers"], float)nanとして物事が起きる時間をキャッチできると思ったが、そうではなかった。

背景:_row["language_modifiers"]_はtsvファイルのセルであり、解析中のtsvでそのセルが空だったときにnanとして表示されます。

10
Dhruv Ghulati

そのようなエラーは、主に空のセルを表すNaNが原因です。データフレームdfでこのイディオムを使用して、追加の操作を適用する前に、このようなデータを除外するのが一般的です。

_df_new = df[df['ColumnName'].notnull()]
_

あるいは、fillna()メソッドを使用してnull値をデフォルトの値に代入(置換)する方が便利な場合があります。例えば。すべてのnullまたはNaNは、その列の平均値に置き換えることができます

_housing['LotArea'] = housing['LotArea'].fillna(housing.mean()['LotArea'])
_

または、空の文字列「」または別のデフォルト値などの値に置き換えることができます

_housing['GarageCond']=housing['GarageCond'].fillna("")
_
24
Ozgur Ozturk

df = df.dropna(thresh=n)を使用することもできます。ここで、nは許容値です。つまり、n行を削除しないために非NA値が必要です

このアプローチは行を削除します

例:5列のデータフレームがある場合、df.dropna(thresh=5)は5つの有効な、またはNa以外の値を持たない行を削除します。

あなたの場合、有効な行のみを保持したいかもしれません。その場合、しきい値を使用する列の数に設定できます。

dropnaのpandasドキュメント

0
hpl002