关于csv文件转为python列表出现NaN值的解决方法
这篇博客写于自己在学习算法心血来潮之时,历经一下午的鏖战,终于解决了一个很基础的问题,不禁感叹,学识往往不在于高,而在于深。
首先问题的提出是在我研究某算法时,期望将数据导入Jupyter进行分析,后来发现导入结果出现很多NaN值,大致如下:
First | Seconed | Third |
---|---|---|
a | b | v |
c | a | NaN |
b | d | a |
a | NaN | NaN |
首先如果从excel中导出该csv文件,会是一个DataFrame,而DataFrame是不允许随意去掉NaN的,除非你用插值或者线性拟合去替换NaN,如果要进行具体算法就必须转换为list格式。
接下来考虑list的其他函数方法,例如del,remove。
- del函数
1 | list[1,2,NaN] |
首先在这里我们就可以认为del函数无法做到我们的要求了,因为我们无法精确知道每一个NaN函数的位置。
我们再尝试remove函数
- remove函数
1 | list[1,2,NaN] |
为什么这一步会报错呢?原因就在于NaN作为一个特殊的float型数据,其值不等于任何其他数(甚至不等于他自己!),也就说NaN != NaN。而remove函数只能根据具体值来锁定位置,也就是说我们可以删除1,2(因为值确定)但是NaN是没有值得,也可以认为是虚无值。
那么我们就排除掉根据定值,定位置在list中去掉该元素的方法。
既然单独找NaN找不到,我们就可以反其道而行之,不打坏的,只挑好的就行了!
例如:
1 | import pandas as pd |
最重要的一步:
1 | for i in range(len(df)): #将嵌套列表的每一个小表单独拎出来 |
结果如下:
1 | [['a', 'b', 'c'], |
简直完美!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 丁宇辰的个人BLOG!