三分钟搞懂你知道和不知道的哪些数据类型转换

       无论是数据分析还是软件开发,总是会被数据类型这个‘磨人的小妖精’搞得烦躁不堪。数据分析师最清楚这是多么痛的领悟!!!

       一般情况下的数据类型、类型转换还好,这里不多赘述,文章最好给出两张汇总表,你可以收入囊中。这里总结下会让你爆炸的几个坑,以及一些免于记忆的操作技巧。


1、None 和  Nan

     1)数据类型

      None是一个python特殊的数据类型, 但是NaN却是用一个特殊的float,它们作为字典的键时,认为是不同的键

                              

    2)混入容器时对数据类型的影响

    a、混入np.array时,如果数据中含有None,会导致整个array的类型变成object,含有np.NaN时,因为本身为float,会将原本用int类型数据保存为float。

扫描二维码关注公众号,回复: 1786825 查看本文章

      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()


数据类型表



数据类型转换方法表


可以参考: 点击打开链接

猜你喜欢

转载自blog.csdn.net/li_yi_chao/article/details/80826670