这是我的数据框的头。我正在尝试删除“类型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
答案 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也是类别。这将使您的机器学习模型更强大。