pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies

一、pandas缺失值处理

  1. 获取缺失值的标记方式:如NAN或其他标记方式
  2. 以NAN为例,判断数据中是否存在NAN:pd.isnull(df)或pd.notnull(df)
  3. 若存在缺失值NAN
    1. dropna(axis='rows'):删除存在的缺失值,不会修改原数据,需接收返回值
    2. fillna(value, inplace=True):填充缺失值
      1. value:要替换成的值
      2. inplace:若为True,将修改原数据,否则不替换修改原数据,生成新对象
    3. np.any(pd.isnull(data)):data中若有一个缺失值,就返回True
    4. np.all(pd.notnull(data)):data中若有一个缺失值,就返回False
  4. 若缺失值未用NAN标记,则将其先替换为np.nan,再进行后续处理

数据如下

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第1张图片

1.1 读取判断

如下 

data = pd.read_csv("../data/成绩单2.csv", encoding='gbk')
data

pd.isnull(data)
pd.notnull(data)
pd.isna(data)

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第2张图片

1.2 删除缺失值与填充缺失值

data.dropna()   # 删除缺失值
data['数学'].fillna(data['数学'].mean(), inplace=True)  # 替换单列缺失值
data

for i in data.columns:  # 循环替换所有缺失值
    if np.all(pd.notnull(data[i])) == False:
        print(i)
        data[i].fillna(data[i].mean(), inplace=True)   # 取每一列的均值替换NAN缺失值
data

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第3张图片

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第4张图片 

1.3 非NAN缺失值标记处理

数据如下

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第5张图片

  • df.replace(to_replace=, value=):替换非NaN缺失值如‘?’为np.nan
    • to_replace:替换前的值
    • value:替换后的值
  • 进行缺失值处理:替换或删除

替换代码及操作如下

data = pd.read_csv("../data/成绩单2.csv", encoding='gbk')
data

data.replace(to_replace='?', value=np.nan)   # 将标记为?的缺失值替换为NaN

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第6张图片

二、pandas数据离散化

连续属性离散化的目的:为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数,常作为数据挖掘的工具

连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值

2.1 离散化

  • pd.qcut(data, q):根据等级或样本分位数将变量离散化到大小相等的桶中。例如,10 个分位数的 1000 个值将生成一个 Categorical 对象,指示每个数据点的分位数成员资格。对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数
    •  q: 整数或类似列表的浮点数分位数。10 表示十分位数,4 表示四分位数,依此类推。交替的分位数数组,例如 [0, .25, .5, .75, 1.] 表示四分位数
  • series.value_counts():统计分组次数
  • pd.cut(data, bins):自定义区间分组
data_math = data['数学']
data_math

help(pd.qcut)  # 查看该函数用法

qcut = pd.qcut(data_math, q=3)
qcut
qcut.value_counts()

bin = [0, 40, 60, 70, 80, 90, 100]      # 自定义区间分组
bin2 = pd.cut(data_math, bins=bin)
bin2
bin2.value_counts()    # 统计次数

 操作如下

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第7张图片

 分六组

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第8张图片

分三组

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第9张图片 自定义区间分组

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第10张图片

2.2 pandas中one-hot编码

把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1,又称热编码

  • pandas.get_dummies(dataprefix=None):将数据转换为0/1统计类型,即将分类变量转换为虚拟/指标变量
    • data:array-like, Series或DataFrame,从中获取虚拟指示器
    • prefix:前缀,分组名字,str, str的列表,或str的字典类型,默认无,添加DataFrame列名的字符串。在DataFrame上调用get_dummies时,传递一个长度等于列数的列表。也即是说' prefix '可以是一个将列名映射到前缀的字典
pd.get_dummies(qcut)

pd.get_dummies(qcut, prefix='数学')

help(pd.get_dummies)

 查看帮助

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第11张图片

pandas缺失值处理及数据离散化isnull、notnull、dropna、nan、fillna、replace、qcut、value_counts、cut、one-hot编码get_dummies_第12张图片 学习导航:http://xqnav.top/

你可能感兴趣的:(pandas,python,开发语言,pandas,数据分析,数据挖掘)