【发布时间】:2020-09-24 14:41:50
【问题描述】:
我有一个已格式化为完全对象的数据集,而与各个列的内容无关。我想将此数据集用于一些基本的线性回归建模,因此需要将数据集转换为可行的输入。数据集中的大多数列都是数字列,在某些行缺少值的情况下,它使用“-”表示缺失值。
我需要用np.NaN 替换破折号,然后将列格式化为浮点数。我已经删除了任何字符串列,例如“国家”,因为幸运的是,我现阶段不需要它们。
我用过:
for col in df:
try:
df[col] = df[col].replace(['-', ' '], np.NaN)
df[col] = df[col].astype(float)
except:
# for row in df[col]:
# if not isinstance(row, float):
# print(row)
print('Could not convert ' + col)
发现数据集中至少有一个空白区域,因此将其添加到replace() 方法中。
我相信这是可行的,但在后续步骤中遇到了困难,因此在替换步骤之后使用 to_csv 导出数据集,当我打开文件时,它唯一做的就是将“-”替换为没有什么。不过,它能够将列重新格式化为浮点数。
失败的步骤,我不知道是不是因为它期望 np.NaN 是我试图用该列的平均值填充剩余缺失值的地方。
我正在使用,删除列后数据框已重命名:
fill_mean = lambda col: col.df_response(col.mean())
for col in df_response:
if df_response[col].isnull().sum() == 0:
print(col + " no NaN's")
else:
try:
df_response.apply(fill_mean, axis = 0)
print(col + " worked as expected")
except:
print(col + ' did not replace NaN with mean')
当没有缺失值并给出列名和预期消息时,此逻辑似乎有效。但是在缺少值的地方,它什么都不做,我也没有收到任何错误,只是我的消息表明它失败了。
感谢任何见解。
【问题讨论】:
-
不加选择地捕获错误然后不对其进行任何处理是不好的做法。该错误可以让您深入了解为什么您的程序“没有用均值替换 NaN”
标签: python pandas replace missing-data