前言: 本节介绍主要介绍三个东西,第一重复值得删除,第二数据的映射,第三数据的离散化和分箱、第四如何发现并处理异常值。切记这里讲的比较简单,如果想要熟练使用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画图的。写好之后到时候发个链接就可以了,这里就暂时不提了。