python-关于None,NaN , 空字符的比较与处理(1)

【问题描述】

在python中经常会遇到这三个特殊值情况。尤其是导入数据文件时,就会遇到这种问题(如csv文件、数据库数据等),这些类型的数据在函数中使用需要十分小心。下面对该类型数据进行分析。

【类型分析】

from numpy import NaN
from pandas import Series, DataFrame
import numpy as np
import pandas as pd
type(NaN)
float
type(None)
NoneType
type("")
str

可以看出三种在我们看来都是空值的数值,其变量类型是不同的。

【相关分析】

下面对该类型数据做相关的处理分析:(想到哪算哪)

首先,看pandas中对此类值的处理情况。

  • 先构造一个DataFrame
test = {"id":[1,2,3,4,5],"birthday":['2000-01-01','',None,'2000-01-19',NaN],"name":['王菲','莫文蔚',NaN,None,'林宥嘉'],"score":[100,99,NaN,98,None]}
test = pd.DataFrame(test)
test

  • 简单统计计算
test['score'].count()
3
test['score'].sum()
297.0
test['birthday'].count()
3
从上面的例子可以看出,当进行count操作时,NaN和None都不计算在内,""则被计算在内;当进行sum等计算时,会对除NaN和None以外的值进行计算。

  • 数据类型转换(初次尝试)
假设我们想讲test中score一列整列转换为int型,则会提示如下报错:
test['score']=test['score'].astype('int')

这是因为test的score一列中含有空值NaN,所以无法进行这一项操作,为此我们需要先做些其他的操作~

  • 空值填充
  1. fillna()

        这个函数可以使我们将空值填充为我们想要的任意值,比较常用~

test['name'] = test['name'].fillna('我是空的!')
test['birthday']=test['birthday'].fillna('空空如也!')
test


可以发现:1)fillna支持填入任何你想的值;2)fillna识别的空值是NaN和None

同时,fillna还支持:

        1) 用前一个数据替代:

test_1 = test.fillna(method='pad',limit = 1)
        2) 用后一个数据替代:
test_2 = test.fillna(method='bfill',limit = 1)

        3)用统计量来替代:

test_2 = test.fillna(test['score'].mean()) 

其中limit代表了允许每一列中多少个NA值被替代~

  • 数据类型转换(二次尝试)

这次我们先将score一列的值赋值为0,再进行转换就可以啦~

test['score']=test['score'].fillna(0)
test['score']=test['score'].astype('int')
test

----------------------------分割线,先到这里哈(2018-6-11)--------------------------------------










猜你喜欢

转载自blog.csdn.net/August1226/article/details/80652048
今日推荐