【问题标题】:Handling missing values in pandas dataframe as input for tensorflow处理熊猫数据框中的缺失值作为张量流的输入
【发布时间】:2020-01-26 04:48:32
【问题描述】:

我有一个如下所示的数据框:

    ID    Age    Sex    Loc
1   1     33     F      S
2   2     64     M      C
3   3     49     M      C
4   4            M      S
5   5     31     F      U

还有其他栏目,但这对于这个问题来说已经足够了。我用它作为神经网络的输入。我的问题是缺少年龄值。其他列包含所有数据,但整个数据集(训练和测试)中大约有 5% 的年龄值缺失。我可以轻松地跳过这些行,但是当我想将测试集中的 ID 号与预测相关联时,这会导致问题,因为索引不再匹配。那么,我如何清理该列,使其仍然可以通过 NN 而不会弄乱我的结果呢?我应该只假设所有空的集合的平均值吗?

当我循环遍历并将 M/F 转换为 1/0 并将 Loc 转换为 0/1/2 时,只需跳过行即可。我的网络准确率为 81%。我只是想知道是否找到一种方法来保留这些行会使其更准确,并且随着我深入研究,这似乎会经常出现在现实世界的数据中。

假设我在 python 方面是个白痴,但在 javascript/angular/databases/等方面有 21 年的 webdev 经验。 ;) 感谢您对此提出任何建议。

【问题讨论】:

  • 我认为这很大程度上取决于你和你的准确性,通常如果我有一个非常大的数据集并且只有 5% 的数据丢失,我会很乐意跳过这些,但最常见的是用平均值填充这些值/中值/众数取决于偏度。
  • @M_S_N 这个特定的数据集并不大。 5% 可能不会产生很大的影响,但这让我觉得我真的不知道如何处理这个问题。这对数据是有意义的。谢谢!

标签: python pandas dataframe tensorflow data-analysis


【解决方案1】:

这里没有一个当前的答案,您基本上必须尝试看看什么有效。

方法一: 按照您的建议,您可以删除所有缺少值的行。

df.dropna(axis=0)

方法二: 用常数值填充它们,例如 0。

 df.fillna(0)

方法三: 用中值或平均列值填充它们

df.fillna(df.mean())

【讨论】:

  • 同意。这取决于缺失值的数量、领域知识和数据生成过程。
  • 缺少该列中大约 5% 的值,所以这不是很多,但它让我思考。我想知道是否也使用平均值,或者是否有某种最佳实践。似乎最好的做法是使模型最准确,这是有道理的。完全放弃价值观是不对的。很好的建议,我会摆弄这些,看看我能得到什么。
  • 您可以使用 R 语言中的 MICE 包。效果很好。
猜你喜欢
  • 2020-04-18
  • 2021-07-02
  • 2020-06-06
  • 2019-08-01
  • 2019-01-17
  • 2014-08-06
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多