数据探索和清洗经验整理
1.数据表处理
1. 表单关联: 对多个文件的数据表,通过它们相同的列元素作为索引,达到表单关联的作用 pandas数据合并之一文弄懂pd.merge()
关联后可以添加一列作为标签,去查询不同数据中的占比
off_train_merchant['off_train_flag']=1
off_merge=off_test_merchant.merge(off_train_merchant,on='merchant_id', how="left").reset_index().fillna(0)
print ('offline 训练集商家与测试集商家重复数量')
print(off_merge['off_train_flag'].sum())
print ('offline 训练集商家与测试集重复商家在总测试集商家中的占比')
print(off_merge['off_train_flag'].sum()/off_merge['off_train_flag'].count())
2. 数据预览:可以利用调用shape
属性查看数据的规模,调用info
函数查看数据信息,调用describe
函数查看数据分布。
3. 数据分组指定指标分组预览: groupby()函数操作 排序用sort_values
: ascending=False
降序,ascending=True
升序, 按照哪一列排序,用by
4. 快速根据dataset
的数据集定义data
和label
: dataset
中数据集的return_X_y
参数用法
5. 利用value_counts
函数查看每个类别数量, 例: data['Species'].value_counts()
6. 利用pandas
的unique()
函数和自定函数,在apply
函数作用下,把标签转化为数字
'''为了方便我们将标签转化为数字
'Adelie Penguin' ------0
'Gentoo penguin' ------1
'Chinstrap penguin' ------2 '''
def trans(x):
if x == data['Species'].unique()[0]:
return 0
if x == data['Species'].unique()[1]:
return 1
if x == data['Species'].unique()[2]:
return 2
data['Species'] = data['Species'].apply(trans)
7. 利用列表生成式和.dtype
记录数字与非数字特征
numerical_features = [x for x in data.columns if data[x].dtype == np.float64]
category_features = [x for x in data.columns if data[x].dtype != np.float64 and x != 'RainTomorrow']
8. 对非数字型离散变量进行编码,相同类别的特征编码成同一个值的方法
## 把所有的相同类别的特征编码为同一个值
def get_mapfunction(x):
mapp = dict(zip(x.unique().tolist(),
range(len(x.unique().tolist()))))
def mapfunction(y):
if y in mapp:
return mapp[y]
else:
return -1
return mapfunction
for i in category_features:
data[i] = data[i].apply(get_mapfunction(data[i]))
9. 将两个数据表,按左右或上下进行连接的函数pd.concat(): pandas数据合并之pd.concat()用法
10. 将数据表由宽数据表转化为长数据表的函数pd.melt(): Pandas 的melt的使用
2.数据类型和数据值处理
1. 对空值Nan进行内容填充: 数据清洗中对空值进行填充的fillna()函数
因为Nan的类型出现数据处理的问题,可以参考: pandas 处理 NaN
2. 批量数据类型转化,体现在例如把int64类型的日期转化为str,再利用循环和切片顺序处理 : 强制类型转换astype()函数,可以批量对数据进行类型转化
而把转化为时间datetime
类型的函数有: pd.to_datetime()
3. 在Dateframe中删除存在缺失值的行函数dropna(): pandas 中 dropna()函数
4. 在Dateframe中删除重复的行或者列drop_duplicates()函数: drop_duplicates去重详解
5. 在Dateframe中删除指定索引,或指定特征名称的行或者列drop()函数: drop函数使用方法
6. 读取csv的时候,利用parse_dates
参数将指定列转化为datetimes
类型
data = pd.read_csv('XXXXXXXXX', parse_dates = ['A', 'B'])
同时,keep_default_na=True
参数可以选择是否把类型不规则的数据按原有样子保存