AttributeError:' float'对象没有属性' split'

时间:2017-02-14 11:14:23

标签: python csv parsing spreadsheet nan

我在说这句话:

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

这似乎适用于row["language_modifiers"]是单词atlas methodcentral)的情况,但在nan出现时却无效。

我认为我的if not isinstance(row["language_modifiers"], float)可以抓住事情的时间nan但事实并非如此。

背景:row["language_modifiers"]是tsv文件中的一个单元格,当正在解析的tsv中该单元格为空时,它将显示为nan

2 个答案:

答案 0 :(得分:22)

你是对的,这种错误主要是由NaN代表空单元格引起的。 在应用您的进一步操作之前,通常会在数据框df上使用此习惯用法过滤掉此类数据:

df_new = df[df['ColumnName'].notnull()]

或者,使用fillna()方法用默认值来估算(替换)null值可能更方便。 例如。所有nullNaN都可以替换为其列的平均值

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

或者可以替换为空字符串""或其他默认值

housing['GarageCond']=housing['GarageCond'].fillna("")

答案 1 :(得分:0)

您也可以使用df = df.dropna(thresh=n),其中n是公差。意思是,它需要 n个非NA值才能删除该行

请记住,这种方法将删除该行

例如:如果您有一个包含5列的数据框,则df.dropna(thresh=5)将删除任何没有5个有效值或非Na值的行。

在您的情况下,您可能只想保留有效的行;如果是这样,您可以将阈值设置为您拥有的列数。

pandas documentation on dropna