我有一个dataset,它被格式化为完全的对象,而不管各个列的内容是什么。我想使用这个数据集进行一些基本的线性回归建模,因此需要将数据集输入到一个可行的输入中。dataset中的大多数列都是数字列,它们缺少某些行的值时,它使用“-”来表示缺少的值。
我需要用np.NaN替换破折号,然后将列格式化为浮点数。我已经删除了任何像'country‘这样的字符串列,因为幸运的是,我在这个阶段不需要它们。
我使用:
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')当没有缺失值并给出列名和预期的消息时,此逻辑似乎有效。但是在缺少值的地方,它什么也不做,我也没有得到任何错误,只是我的消息,它已经失败了。
我很感谢你的见解。
发布于 2020-09-24 23:23:20
您的应用函数正在做一些事情,但是您没有将其存储为新的数据帧,因此它不会返回给您。
如果你想用平均值填充na行,你可以这样做:
df = pd.DataFrame({'Name': ['Mick', 'Alice', 'Bob', 'Mary'],
                  'Age': [17, 27, 37, np.nan]})
mean_age = df['Age'].mean()
df['Age'].fillna(mean_age)https://stackoverflow.com/questions/64048850
复制相似问题