首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dataframe replace()未将‘-’替换为具有赋值的值

Dataframe replace()未将‘-’替换为具有赋值的值
EN

Stack Overflow用户
提问于 2020-09-24 22:41:50
回答 1查看 79关注 0票数 0

我有一个dataset,它被格式化为完全的对象,而不管各个列的内容是什么。我想使用这个数据集进行一些基本的线性回归建模,因此需要将数据集输入到一个可行的输入中。dataset中的大多数列都是数字列,它们缺少某些行的值时,它使用“-”来表示缺少的值。

我需要用np.NaN替换破折号,然后将列格式化为浮点数。我已经删除了任何像'country‘这样的字符串列,因为幸运的是,我在这个阶段不需要它们。

我使用:

代码语言:javascript
运行
复制
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,所以我试图用该列的平均值来填充剩余的缺失值。

我正在使用,并且在删除列之后,数据帧已被重命名:

代码语言:javascript
运行
复制
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')

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

我很感谢你的见解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 23:23:20

您的应用函数正在做一些事情,但是您没有将其存储为新的数据帧,因此它不会返回给您。

如果你想用平均值填充na行,你可以这样做:

代码语言:javascript
运行
复制
df = pd.DataFrame({'Name': ['Mick', 'Alice', 'Bob', 'Mary'],
                  'Age': [17, 27, 37, np.nan]})

mean_age = df['Age'].mean()
df['Age'].fillna(mean_age)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64048850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档