我在说这句话:
lang_modifiers = [keyw.strip() for keyw in row["language_modifiers"].split("|") if not isinstance(row["language_modifiers"], float)]
这似乎适用于row["language_modifiers"]
是一个词(atlas method
,central
),但不是当它出现nan
。
我认为我的if not isinstance(row["language_modifiers"], float)
可以抓住时间,因为nan
的事情,但事实并非如此。
背景:row["language_modifiers"]
是tsv文件中的一个单元格,当被解析的tsv中的单元格为空时,它将显示为nan
。
你是对的,这种错误主要是由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("")
您也可以使用df = df.dropna(thresh=n)
,其中n
是容差。这意味着,它需要n个非NA值才能删除该行
请注意,这种方法将删除该行
例如:如果您有一个包含5列的数据框,df.dropna(thresh=5)
将删除任何没有5个有效或非Na值的行。
在您的情况下,您可能只想保留有效的行;如果是这样,您可以将阈值设置为您拥有的列数。