# 显示数据的缺失值
import pandas as pd
from io import StringIO
csv_data = '''A,B,C,D
1.0,2.0,3.0,4.0
5.0,6.0,,8.0
10.0,11.0,12.0,'''
# csv_data = unicode(csv_data)
df = pd.read_csv(StringIO(csv_data))
print(df)
1.缺失值处理
df.isnull().sum() #isnull判断每个位置是否有NaN,计算每一个特征中:有几个样本在该特征上存在缺失
1.直接删除缺省值多的样本或者特征
df.dropna() #删除存在缺失值的样本
df.dropna(axis=1)#删除存在缺失值的特征
df.dropna(how='all') #山所有特征都为缺失的样本
df.dropna(thresh=4) #删除特征数少于参数指定个数的样本
df.dropna(subset=['C']) #删除在指定特征处有缺失值的样本
2.处理类别型数据
import pandas as pd
df=pd.DataFrame([['green','M',10.1,'class1'],
['red','L',13.5,'class2'],
['blue','XL',15.3,'class1']])
df.columns=['color','size','price','classlabel']
df
1)序列特征映射
size_mapping={'XL':3,'L':2,'M':1}
df['size']=df['size'].map(size_mapping)#将size特征列的XL等字符替换成字典
size_mapping#映射对应的数字
df
2)类别编码
import numpy as np
class_mapping={label:idx for idx,label in enumerate(np.unique(df['classlabel']))}
#enumerate将列表参数映射成带序号的元组对
#class_mapping作用是找出出现一个新classlabel时的index
class_mapping
用映射字典将分类标签转换为整数
df['classlabel']=df['classlabel'].map(class_mapping)
df
创建反向映射,将转换后的分类标签匹配到原来的字符串
inv_class_mapping={v:k for k,v in class_mapping.items()}
df['classlabel']=df['classlabel'].map(inv_class_mapping)
df