本篇介绍合并变量和target这两个数据,及合并之前的一些数据清洗工作。
1. 读取表格文件
读入csv文件,代码如下:
import numpy as np
import pandas as pd
data = pd.read_csv('data_for_test.csv',engine='python')
print(data.shape)
data.head(3)
输出为:
pd.read_csv()函数常用参数:
- nrows: 读取行数
- usecols: 读取对应列
- encoding: 编码格式,默认utf-8;如果数据含中文,导致默认格式输出是乱码的情况,可以尝试encoding='gbk’或者encoding=‘gb18030’。
- engine官方解释:
engine : {‘c’, ‘python’}, optional
Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
笔者通常不设置此参数,但是不设置这个参数有时候会提醒错误,所以有时候需要设置,一般都是报错后再设置。
data.shape结果显示读入数据有186行,14列。
data.head(3)输出前三行数据,含表头。
多参数设置读入数据:
data_test = pd.read_csv('data_for_test.csv',engine='python',nrows=20,usecols=['id','appl_time'],encoding='gbk')
查看每一列的数据格式:
data.dtypes
输出为:
查看指定列的数据格式为:
data[['id','var2']].dtypes
输出为:
输出该数据表的所有列标题为:
data.columns.values.tolist()
2. 删除列
发现grade_x列不需要,删除该列。
data.drop(['grade_x'],axis=1,inplace=True)
3. 删除不符合条件的样本
查看数值型变量的统计数据:
data.describe().T
发现age的最小值是-50,不符合常理,所以将age列小于等于0的行删除,即留下‘age’列大于0的数据。
data = data[data['age']>0]
可以看到原先数据是185行,现在剩184行。
选取符合条件样本的代码还可以是:
data3 = data.loc[(data['age'] > 25) & (data['city'] == 'Beijing')]
表示age大于25且city是Beijing的样本。
data2 = data.loc[data['city'].isin(['Shanghai'])]
表示city含Shanghai的样本。
4. 列重命名
states = {
'var1':'is_phone'
}
data.rename(columns=states,inplace=True)
可以看到var1被重命名为is_phone,inplace=True表示在原数据进行修改。
5. Merge合并数据
合并数据前,要检查索引列(key)是否符合以下条件:
- key无空值
- key数据格式一致
- key无重复项
此样本key为两列,id和appl_time。
去除key为空的样本:
data.dropna(subset=['id','appl_time'],inplace=True)
使用data.dtypes查看到数据格式都为object。
但需要注意的是,对于数字或时间列,只要有一个样本为字符型数据,数据格式即为object,所以为了统一数据格式,建议都转为字符型数据。
data['appl_time']=data['appl_time'].apply(str)
删除重复项:
data=data.drop_duplicates(['id','appl_time'])
从184行数据变为182行。
变量已经处理完成,再读入target数据,同样的数据处理过程,最后再合并数据。
target = pd.read_csv('data_target.csv',engine='python')
print(target.shape)
target.head()
合并数据:
data = pd.merge(target, data, on=['id','appl_time'],how='inner')
print(data.shape)
data.head()
how='inner’表示为内连接合并方式,即data和target表格的id和appl_time一致时才合并,合并后剩余182行数据。
6. 存入csv文件
最后将处理好的数据存为csv文件。
data.to_csv('data_merge.csv',index=False)
index=False表示不输出索引。