我如何知道在处理空数据时是删除列还是行?

时间:2018-07-24 21:11:49

标签: python pandas dataframe math machine-learning

这是我的数据框的头。我正在尝试删除“类型2”列中的NaN值,但是我不确定如何决定是删除包含NaN值的整个列,还是删除包含NaN值的行。我应该如何决定使用哪种方法删除NaN值?对于一般的数据集,是否有确定的阈值来确定是删除行还是整列?我的最终目标是在此数据集上运行机器学习算法,以预测神奇宝贝是否为传奇。谢谢

#   Name    Type 1  Type 2  Total   HP  Attack  Defense Sp. Atk Sp. Def Speed   Generation  Legendary
2   3   Venusaur    Grass   Poison  525 80  82  83  100 100 80  1   False
3   3   VenusaurMega Venusaur   Grass   Poison  625 80  100 123 122 120 80  1   False
5   5   Charmeleon  Fire    NaN 405 58  64  58  80  65  80  1   False
9   7   Squirtle    Water   NaN 314 44  48  65  50  64  43  1   False
10  8   Wartortle   Water   NaN 405 59  63  80  65  80  58  1   False
15  12  Butterfree  Bug Flying  395 60  45  50  90  80  70  1   False

3 个答案:

答案 0 :(得分:1)

  

在这种情况下,我将禁止删除整行。

在删除行时,您的数据集中以NaN为第二种类型的神奇宝贝可能永远不会。

5   5   Charmeleon  Fire    NaN 405 58  64  58  80  65  80  1   False

在下一步中,很容易想到没有第二种类型的传奇口袋妖怪。您将永远无法正确预测这种神奇宝贝。

您仍然可以删除该列,但是会丢失信息。 除了删除之外,我宁愿为这些undefined_type值引入一个NaN标记,然后从那里开始。

5   5   Charmeleon  Fire    undefined_type 405 58  64  58  80  65  80  1   False

在这些事情上,您应该进行一些功能分析,以找出哪些功能确实对信息获取有所贡献(例如,采用肘部方法的随机森林)。如果引入undefined_type标签会减少该功能的信息获取,在分析之后您将知道。

答案 1 :(得分:0)

是的,我们可以为此确定一个阈值。 如果所有列中都具有NAN值,则最好使用:

data.dropna(axis=0,inplace=True)

这将删除所有包含NAN的方法,如果您使用axis = 1,则会删除所有具有NAN值的列。

您需要考虑的一件事是,一栏中有多少百分比的值是NAN,如果仅一栏中有NAN值的70%以上,而我没有其他方法可以完成此操作,则删除此列。 如果NAN值分布在列中,则最好删除行。

我希望它能对您有所帮助。

答案 2 :(得分:0)

在这种情况下,我认为您最好的选择是将类型分类,并使type列中的NaN也是类别。这将使您的机器学习模型更强大。