一、缺失值的观察与处理
通常拿到的数据中含有很多缺失值,需要经过数据清洗达到可以分析的标准。
处理缺失值一般有三种思路:
- 将缺失值置为一个常数
- 使用函数DataFrame.fillna()
可以通过常数填充,还可以通过字典填充不同常数
参数:
method:填充方法,ffill——用前一个非空缺值填充,bfill——用下一个空缺值填充
limit:限制填充个数
axis:修改填充方向 - 将缺失值所在行删除
- 使用函数DataFrme.dropna()
参数:
axis: 默认axis=0。0为按行删除,1为按列删除
how: 默认 ‘any’。 ‘any’指带缺失值的所有行/列;’all’指清除一整行/列都是缺失值的行/列
thresh: int,保留含有thresh个非nan值的行
subset: 删除特定列中包含缺失值的行或列
inplace: 默认False,不改动原数据
df.info()
df.isnull().sum()
df[np.isnan(df['Age'])]=0
df.dropna()
df.fillna()
df[df['Age']==None]=0
df[df['Age'].isnull()] = 0
二、重复值的观察与处理
- 重复值的观察
使用duplicated()方法,可以查找列表中重复值,仅在两条记录中所有数据都相等时才会被判定为重复
duplicated()支持从前向后和从后向前的检索顺序,后被检索到的重复数据在重复值判断中显示True
df.duplicated()
df.duplicated().sum()
df[df.duplicated()]
- 重复值的处理
使用drop_duplicates()方法可以删除重复记录
df.drop_duplicates(inplace = True)
df.reset_index
df.to_csv('test_clear.csv')
三、特征观察与处理
观察列索引可以发现,不同数据有不同的数据类型。
数值型特征分为离散型数值特征和连续型数值特征,一般可以直接用于模型的训练,但有时为了模型的稳定性及鲁棒性会对连续变量进行离散化。
文本型特征往往需要转换成数值型特征才能用于建模分析
- 分箱操作
是一种无监督离散化方法,分为等距离分箱和等频度分箱。特征离散化后模型会更稳定,降低了模型过拟合的风险。
可以使用pandas.cut()方法实现分箱
pandas.cut(x,bins,right,labels,retbins,precision)
x:被切分的数组,必须是一维的
bins:被切分后的区间,可以是一个int型的标量(x被切分为bins个组)、标量序列(定义了被分割后每一个区间的边缘),或者pandas.IntervalIndex(定义要使用的精确区间)
right:bool型参数,表示是否包含区间右部
labels:给分割后的区间打标签
df['AgeBand'] = pd.cut(df['Age'],5,labels=[1,2,3,4,5])
df['AgeBand']=pd.cut(df['Age'],[0,5,15,30,50,80],labels=[1,2,3,4,5])
df['AgeBand']=pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels=[1,2,3,4,5])
- 变换文本型变量
1、查看文本变量及名称
data.value_counts()可以用于查看表格某列中有多少不同值,并计算每个不同值有多少重复值
unique()方法可以用于统计list中的不同值,返回一个array,仅返回不同值
nunique()方法可以直接统计不同值的个数
map()方法会根据提供的函数对制定序列做映射
df['Sex'].value_counts()
male 453
female 261
Name: Sex, dtype: int64
df['Sex'].unique()
array(['male', 'female'], dtype=object)
df['Sex'].nunique()
2
df['Sex_num']=df['Sex'].map({'male':1,'famale':2})
2、将文本型变量进行转化
对于离散特征的编码分两种情况:
1、特征取值之间没有大小之分的意义,比如颜色,就可以用独热编码
2、特征取值之间有大小之分的意义,比如衣服的尺码,可以直接用映射进行
pd.get_dummies()可以用于生成独热编码
参数:
data:Series或者DataFrame
prefix:用于追加DataFrame列名的字符串。在DataFrame上调用get_dummies时,传递一个长度等于列数的列表。或者,prefix可以是一个将列名映射到前缀的字典
for feat in ['Age','Embarked']:
x = pd.get_dummies(df[feat],prefix=feat)
df=pd.concat([df,x],axis=1)
以上学习内容来自Datawhale
Original: https://blog.csdn.net/Malcohol/article/details/122394017
Author: Malcohol
Title: Python数据分析学习笔记(二)——数据清洗及特征处理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/751163/
转载文章受原作者版权保护。转载请注明原作者出处!