数据预处理
数据预处理主要包括:
数据合并:通过堆叠合并和主键合并等多种合并的方式可以将关联的数据信息合并在同一张表格中
数据清洗:对数据进行检测,查询是否有重复值,缺失值和异常值,并对这些数据进行处理
标准化数据:为了消除特征之间量纲和取值范围造成的影响,需要对数据进行标准化处理,也可以称作规范化处理
转换数据:对经过前面处理的数据进行合理的转换,使其符合分析的要求
数据合并:通过堆叠合并和主键合并等多种合并的方式可以将关联的数据信息合并在同一张表格中
这节博客主要介绍pandas中数据合并常见的方法,主要包括concat,apeend,merge,join四种合并数据的方法
内连接,外连接具体的区别我也忘记了,可参照博客:https://blog.csdn.net/weixin_39241397/article/details/79772379
在merge我会使用该博客中的表格,进行简单的演示
pandas.concat
pandas.concat(objs,axis=0,joins=‘outer’,)
主要常用的使用这三个参数
objs接受多个series ,dateframe,panel的组合
axis表示连接的轴向,默认为0,默认纵向连接
join 接受inner或者outer inner表示索引按照交集进行合并,outer表示索引按照并集进行合并
import pandas as pd
table_a=pd.read_excel('a.xlsx')
table_b=pd.read_excel('b.xlsx')
print('a表为:\n',table_a)
print('b表为:\n',table_b)
a表为:
A B C D E
0 A1 B1 C1 D1 E1
1 A2 B2 C2 D2 E2
2 A3 B3 C3 D3 E3
3 A4 B4 C4 D4 E4
4 A5 B5 C5 D5 E5
b表为:
B D F
0 B2 D2 F2
1 B3 D3 F3
2 B3 D3 F4
3 B4 D4 F5
table_1=pd.concat([table_a,table_b],axis=1,join='outer')
print('a,b表按照并集横向合并的新表为:\n')
print(table_1)
a,b表按照并集横向合并的新表为:
A B C D E B D F
0 A1 B1 C1 D1 E1 B2 D2 F2
1 A2 B2 C2 D2 E2 B3 D3 F3
2 A3 B3 C3 D3 E3 B3 D3 F4
3 A4 B4 C4 D4 E4 B4 D4 F5
4 A5 B5 C5 D5 E5 NaN NaN NaN
table_2=pd.concat([table_a,table_b],axis=1,join='inner')
print('a,b表按照交集横向合并的新表为:\n')
print(table_2)
a,b表按照交集横向合并的新表为:
A B C D E B D F
0 A1 B1 C1 D1 E1 B2 D2 F2
1 A2 B2 C2 D2 E2 B3 D3 F3
2 A3 B3 C3 D3 E3 B3 D3 F4
3 A4 B4 C4 D4 E4 B4 D4 F5
table_3=pd.concat([table_a,table_b],axis=0,join='outer',sort=False)
print('a,b表按照并集纵向合并的新表为:\n')
print(table_3)
a,b表按照并集纵向合并的新表为:
A B C D E F
0 A1 B1 C1 D1 E1 NaN
1 A2 B2 C2 D2 E2 NaN
2 A3 B3 C3 D3 E3 NaN
3 A4 B4 C4 D4 E4 NaN
4 A5 B5 C5 D5 E5 NaN
0 NaN B2 NaN D2 NaN F2
1 NaN B3 NaN D3 NaN F3
2 NaN B3 NaN D3 NaN F4
3 NaN B4 NaN D4 NaN F5
table_4=pd.concat([table_a,table_b],axis=0,join='inner')
print('a,b表按照交集纵向合并的新表为:\n')
print(table_4)
a,b表按照交集纵向合并的新表为:
B D
0 B1 D1
1 B2 D2
2 B3 D3
3 B4 D4
4 B5 D5
0 B2 D2
1 B3 D3
2 B3 D3
3 B4 D4
pandas.DateFrame.append
pandas.DateFrame.append 只能用于纵向连接,而且两张表格的列名需要完全一致
table_c=pd.read_excel('c.xlsx')
print('apennd纵向连接bc表')
print(table_b.append(table_c))
apennd纵向连接bc表
B D F
0 B2 D2 F2
1 B3 D3 F3
2 B3 D3 F4
3 B4 D4 F5
0 B5 D5 F5
1 B6 D6 F6
2 B7 D7 F7
pandas.merge
pandas.merge(left,right,how=‘inner’,on,letf_on=None,right_None)
left,right好理解,就是导入左边右边数据,接受dateframe与dateright
how 接受inner,outer,left,right四个,分别表示内连接,外连接,左连接,右连接,下面四个例子很好诠释了四个连接的区别
on 表示两个数据合并的主键
left_on 左边数据参数接受用于合并的主键
right_on 同理
table_d=pd.read_excel('d.xlsx')
table_f=pd.read_excel('f.xlsx')
print('d表为:\n',table_d)
print('f表为:\n',table_f)
d表为:
id student_name class_id
0 1 gjp 201901
1 2 gs 201902
2 3 dyx 201903
3 4 ll 201904
4 5 kk 201905
5 6 jj 201906
f表为:
class_id class_name
0 201901 一班
1 201902 二班
2 201903 三班
3 201904 四班
4 201907 七班
#内连接
table_5=pd.merge(table_d,table_f,how='inner')
print('表d和表f经过内连接为:')
print(table_5)
表d和表f经过内连接为:
id student_name class_id class_name
0 1 gjp 201901 一班
1 2 gs 201902 二班
2 3 dyx 201903 三班
3 4 ll 201904 四班
#外连接
table_6=pd.merge(table_d,table_f,how='outer')
print('表d和表f经过外连接为:')
print(table_6)
表d和表f经过外连接为:
id student_name class_id class_name
0 1.0 gjp 201901 一班
1 2.0 gs 201902 二班
2 3.0 dyx 201903 三班
3 4.0 ll 201904 四班
4 5.0 kk 201905 NaN
5 6.0 jj 201906 NaN
6 NaN NaN 201907 七班
#左连接
table_7=pd.merge(table_d,table_f,how='left')
print('表d和表f经过左连接为:')
print(table_7)
表d和表f经过左连接为:
id student_name class_id class_name
0 1 gjp 201901 一班
1 2 gs 201902 二班
2 3 dyx 201903 三班
3 4 ll 201904 四班
4 5 kk 201905 NaN
5 6 jj 201906 NaN
#右连接
table_8=pd.merge(table_d,table_f,how='right')
print('表d和表f经过右连接为:')
print(table_8)
表d和表f经过右连接为:
id student_name class_id class_name
0 1.0 gjp 201901 一班
1 2.0 gs 201902 二班
2 3.0 dyx 201903 三班
3 4.0 ll 201904 四班
4 NaN NaN 201907 七班
pandas.DateFrame.join
join连接可以实现部分主键合并的功能,但是使用join连接两个主键的名字必须相同
四种连接方式,就不一一举例,可参考merge的用法,调用形式和merge不同,举一个例子
join用法博主暂时没搞清楚,没明白lsuffix
print('join的用法')
print(table_d.join(table_f,on='class_id',lsuffix='d'))
join的用法
id student_name class_idd class_id class_name
0 1 gjp 201901 NaN NaN
1 2 gs 201902 NaN NaN
2 3 dyx 201903 NaN NaN
3 4 ll 201904 NaN NaN
4 5 kk 201905 NaN NaN
5 6 jj 201906 NaN NaN