微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据框replace不使用分配的值替换'-'

如何解决数据框replace不使用分配的值替换'-'

我有一个数据集,它的格式完全是对象,而与各个列的内容无关。我想将此数据集用于一些基本的线性回归建模,因此需要将数据集输入可行的输入中。数据集中的大多数列都是数字列,在某些行中缺少值的地方,它使用“-”表示缺少的值。

我需要将破折号替换为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')

当没有缺失值并给出列名和预期消息时,此逻辑似乎起作用。但是在缺少值的地方,它什么也不做,我也没有错误,只是我的消息是失败了。

我很感谢您的见识。

解决方法

您的apply函数正在执行某些操作,但是您没有将其存储为新的数据框,因此不会将其返回给您。

如果要用平均值填充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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。