无论是数据分析还是软件开发,总是会被数据类型这个‘磨人的小妖精’搞得烦躁不堪。数据分析师最清楚这是多么痛的领悟!!!
一般情况下的数据类型、类型转换还好,这里不多赘述,文章最好给出两张汇总表,你可以收入囊中。这里总结下会让你爆炸的几个坑,以及一些免于记忆的操作技巧。
1、None 和 Nan
1)数据类型
None是一个python特殊的数据类型, 但是NaN却是用一个特殊的float,它们作为字典的键时,认为是不同的键
2)混入容器时对数据类型的影响
a、混入np.array时,如果数据中含有None,会导致整个array的类型变成object,含有np.NaN时,因为本身为float,会将原本用int类型数据保存为float。
b、混入pandas的Series时, 如果Series整体类型为Object类型,None则不做转化。
如果Series中包含float型,Object类型的None被替换成了float类型的NaN。甚至能将s[s.isnull()]= None
,和
s.replace(NaN, None)
操作的效果无效化。 这时需要用where函数才能进行替换。
原因:这么设计可能是因为None无法参与numpy的大多数计算, 而pandas的底层又依赖于numpy,因此做了这样的自动转化。
3)等值型判断 (相对来说None表现的更稳定。)
基于2)的原因可以理解: 在‘较顶层的’情况下(如datafream),None和NaN被判断为相等;在‘较底层的’情况下(如:tuple、array、Series),None和Nan通常被判断为不相等,此时若希望将None、NaN判断为相等,array、Series都有专用的函数
4)DataFrame.groupby会忽略分组列中含有None或者NaN的记录
5)None能够直接被导入数据库作为空值处理, 包含NaN的数据导入时会报错。
2、不填、空格的类型是str , 有字符的类型是 unicode np.nan 是float
1)dropna只能删除NaN 和 None,‘’与‘ ’是字符串类型,dropna是无法去除的
2)有时搜索不到要找的字符串类型的键,考虑下字符前后是否有空格。(‘ name’or ‘name ’)
一些操作技巧:
- 在用pandas和numpy处理数据阶段将None,NaN统一处理成NaN,以便支持更多的函数。
- 如果要判断Series,numpy.array整体的等值性,用专门的Series.equals,numpy.array函数去处理,不要自己用
==
判断 * - 如果要将数据导入数据库,将NaN替换成None
- 当整列数据中包括浮点型和字符型,且需要删除字符型时,遍历df.unique()的结果,而无需遍历整列数据,减少计算。
- Pandas中进行数据类型转换有三种基本方法:
1)使用astype()函数进行强制类型转换
2)自定义函数进行数据类型转换
3)使用Pandas提供的函数如to_numeric()、to_datetime()
数据类型表
数据类型转换方法表
可以参考:点击打开链接
###欢迎加入全网音频视频课程共享群群,和各领域大佬一起讨论学习知识####
(若群二维码过期,可先加个人微信再拉进群)