【问题标题】:Dataframe replace() not replacing '-'s with with assigned value数据框替换()没有用分配的值替换'-'
【发布时间】: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


【解决方案1】:

您的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2017-03-23
    相关资源
    最近更新 更多