动手学数据分析 Task 2
一、处理缺失值
常用的函数有dropna()和fillna()。
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
属性说明:
默认参数axis=0,根据索引(index)删除指定的行; axis=1,根据列名(columns)删除指定的列
默认axis=0,how=‘any’,删除带有空值的行,只要有一个空值,就删除整行
axis=1,删除带有空值的列,只要有一个空值,就删除整列
how=‘all’, 整行都是空值时,才会被删除
thresh: 设定阈值,缺失值个数大于该阈值,整行(axis=0)或整列(axis=1)才会被删除
subset=[1,2], 删除指定列(1,2)中包含缺失值的行
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
属性说明:
value : 变量, 字典, Series, or DataFrame。用于填充缺失值(例如0),或者指定为每个索引(对于Series)或列(对于DataFrame)使用哪个字典/Serise/DataFrame的值。(不在字典/Series/DataFrame中的值不会被填充)这个值不能是一个列表。
method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None ; 在Series中使用方法填充空白(‘backfill’, ‘bfill’:用下一个数值填充;‘pad’, ‘ffill’:用上一个数值填充。)
axis : {0 or ‘index’, 1 or ‘columns’}
inplace : boolean, 默认值 False。如果为Ture,在原dataframe填满。注意:这将修改次对象上的任何其他视图(例如,DataFrame中的列的无复制贴片)
limit : int, 默认值 None; 如果指定了方法,则这是连续的NaN值的前向/后向填充的最大数量。 换句话说,如果连续NaN数量超过这个数字,它将只被部分填充。 如果未指定方法,则这是沿着整个轴的最大数量,其中NaN将被填充。 如果不是无,则必须大于0。
downcast : dict, 默认是 None; 如果可能的话,把 item->dtype 的字典将尝试向下转换为适当的相等类型的字符串(例如,如果可能的话,从float64到int64)
二、分箱操作
将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = ['1','2','3','4','5'])
将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = ['1','2','3','4','5'])
将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = ['1','2','3','4','5'])
三、LabelEncoder 和 OneHotEncoder
LabelEncoder:Encode labels with value between 0 and n_classes-1.
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(df['Cabin'].values.tolist())
#transform 以后,这一列数就变成了 [0, n-1] 这个区间的数,即是 le.classes_ 中的索引
df['Cabin_transform']=le.transform(df['Cabin'].values.tolist())
OneHotEncoder:Encode labels with dummy variables.
for feat in ["Age", "Embarked"]:
# x = pd.get_dummies(df["Age"] // 6)
# x = pd.get_dummies(pd.cut(df['Age'],5))
x = pd.get_dummies(df[feat], prefix=feat)
df = pd.concat([df, x], axis=1)
# f[feat] = pd.get_dummies(df[feat], prefix=feat)