Pandas入门第二章之数据清洗之数据变化

 

 

前言: 本节介绍主要介绍三个东西,第一重复值得删除,第二数据的映射,第三数据的离散化和分箱、第四如何发现并处理异常值。切记这里讲的比较简单,如果想要熟练使用pandas的话,参加几个比赛还是必要的。

 

数据清洗之删除重复值,使用drop_duplicates()的时候注意两个特点

第一:   drop_duplicates()并不直接修改原始数据,所以想要修改原始数据需要使用 inplace=True

第二: drop_duplicates()默认是一行中所有的值都和下面的值相同时,默认会保存第一个数据

第三: 如何指定当某些列作为重复值检测的标准

import pandas as pd
import numpy as np

data = {'name': ['YYLin', 'YYLin', 'YYLin', 'YYLin_3', np.nan],
        'birth_day': ['2000-01', '2000-01', '2000-01', '2001-04', np.nan],
        'age': [6, 6, 8, 9, np.nan]}

duplicate_data = pd.DataFrame(data)
print("显示原始数据集中的数据:\n", duplicate_data)

chose_Default_method = False
if chose_Default_method:
    Default_data = duplicate_data.drop_duplicates()
    print("默认时使用drop_duplicates的结果:\n", Default_data)
else:
    duplicate_data.drop_duplicates(['name', 'birth_day'], inplace=True)
    print("默认时使用drop_duplicates的结果:\n", duplicate_data)

 

数据的映射是指将通过一个函数或者字典,将某列数据中的值转化成另一种数据表现形式。

import pandas as pd
import numpy as np

data = {'name': ['YYLin', 'YYLin', 'YYLin', 'YYLin_3', np.nan],
        'birth_day': ['2000-01', '2000-01', '2000-01', '2001-04', np.nan],
        'age': [6, 6, 8, 9, np.nan], 'sex': ['Boy', 'boy', 'boy', 'Girl', 'girl']}

duplicate_data = pd.DataFrame(data)
print("显示原始数据集中的数据:\n", duplicate_data)

# 定义一个字典用于数据的转化
sex_to_num = {
    'girl': 1,
    'boy': 2
}

# 该函数分为两步 第一步将数据进行转化成低字节 然后映射到具体的值之中
duplicate_data['sex'] = duplicate_data['sex'].str.lower().map(sex_to_num)
print("经过映射函数之后的结果是:\n", duplicate_data)

 

第三: 如果对数据进行分箱, 分箱的一个具体应用,例如数据清洗之中,我们可能发现年龄段的取值是(1-100),但是实际我们并不关系每一个值,我们关系的是每个年龄段的数据的信息,例如1-15 是青少年, 16-20是少年依次类推。我们看一下pandas是如何实现这个功能的。

下面程序中实现三个功能:

第一:  使用pd.cut() 函数将数据集中指定的列分成四份。

第二: 在原始数据集中增加一列表示该条数据的所属类别

第三: 统计每个类别中数据量,并在原始数据集上增加一列元素表示该类别数据的量。

原始数据集以及最后生成的数据

 

import pandas as pd
import numpy as np

# 对Series()进行分箱  pd.cut()
data = pd.DataFrame(np.arange(100), columns=['age'])
# print("显示原始数据集中的数据:\n", data)

# 定义数据进行分组的名称
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']

# 统计年龄的类别 并且数据属于哪个类别进行赋值操作
after_cut_data = pd.cut(data['age'], 4, labels=group_names)
data['Age_category'] = after_cut_data

# 聚类之后我们统计每个类别的数量然后并赋值给原始的数据集之中
value_counts_data = after_cut_data.value_counts().reset_index().rename(columns={'index': 'Age_category'})
print("经过转化之后的索引值是:\n", value_counts_data)

# 使用merge()函数 对数据进行按照关键字Age_category 进行合并操作
merge_data = pd.merge(data, value_counts_data, on='Age_category')
print("分箱之后每个箱重的数量:\n", merge_data)

 

第四部分,发现并找到数据集中的异常值的方法,我打算用比较笨的方法。首先是画图,然后使用条件语句删除异常值。后面我会单独讲一下如何使用pandas画图的。写好之后到时候发个链接就可以了,这里就暂时不提了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值