数据合并
使用Join()合并,合并的方式是根据行和行进行合并。
# 使用join合并,着重关注的是 行的合并
import pandas as pd
df1=pd.DataFrame({'Red':[1,3,5],'Green':[5,0,3]},index=list('abc'))
df2=pd.DataFrame({'Blue':[1,9,8],'Yellow':[6,6,7]},index=list('cde'))
print(df1)
print(df2)
'''
Red Green
a 1 5
b 3 0
c 5 3
Blue Yellow
c 1 6
d 9 6
e 8 7
'''
# 简单合并(默认是left左连接,以左侧df1为基础,连接右侧中index相同的行)
df3=df1.join(df2,how='left')
print(df3)
'''
Red Green Blue Yellow
a 1 5 NaN NaN
b 3 0 NaN NaN
c 5 3 1.0 6.0
'''
# 右连接:以左侧df2为基础,连接左侧df1中index相同的行
df4 = df1.join(df2,how='right')
print(df4)
'''
Red Green Blue Yellow
c 5.0 3.0 1 6
d NaN NaN 9 6
e NaN NaN 8 7
'''
# 外连接(左右两侧的index全连接,取并集)
df5 = df1.join(df2,how='outer')
print(df5)
'''
Red Green Blue Yellow
a 1.0 5.0 NaN NaN
b 3.0 0.0 NaN NaN
c 5.0 3.0 1.0 6.0
d NaN NaN 9.0 6.0
e NaN NaN 8.0 7.0
'''
# 合并多个DataFrame对象
df6 = pd.DataFrame({'Brown':[3,4,5],'White':[1,1,2]},index=list('aed'))
print(df6)
df7 = df2.join([df1,df6])
print(df7)
'''
Brown White
a 3 1
e 4 1
d 5 2
Blue Yellow Red Green Brown White
c 1 6 5.0 3.0 NaN NaN
d 9 6 NaN NaN 5.0 2.0
e 8 7 NaN NaN 4.0 1.0
'''
merge()函数是列和列合并。
# 使用merge,着重关注的是列的合并
df1=pd.DataFrame({'名字':list('ABCDE'),'性别'['男','女','男','男','女'],'职称':['副教授','讲师','助教','教授','助教']},index=range(1001,1006))
print(df1)
'''
名字 性别 职称
1001 A 男 副教授
1002 B 女 讲师
1003 C 男 助教
1004 D 男 教授
1005 E 女 助教
'''
df2=pd.DataFrame({'名字':list('ABDAX'),'课程':['C++','计算机导论','汇编','数据结构','马克思原理'],'职称':['副教授','讲师','教授','副教授','讲师']},index=[1001,1002,1004,1001,3001])
print(df2)
'''
名字 课程 职称
1001 A C++ 副教授
1002 B 计算机导论 讲师
1004 D 汇编 教授
1001 A 数据结构 副教授
3001 X 马克思原理 讲师
'''
# merge默认根据左右对象中出现同名的列作为连接的键,且连接方式是how=’inner’内连接,内连接取两者交集
print(pd.merge(df1,df2))
'''
名字 性别 职称 课程
0 A 男 副教授 C++
1 A 男 副教授 数据结构
2 B 女 讲师 计算机导论
3 D 男 教授 汇编
'''
# 指定列名合并,suffixes来设置重复列的名字
print(pd.merge(df1,df2,on='名字',suffixes=['_1','_2']))
'''
名字 性别 职称_1 课程 职称_2
0 A 男 副教授 C++ 副教授
1 A 男 副教授 数据结构 副教授
2 B 女 讲师 计算机导论 讲师
3 D 男 教授 汇编 教授
'''
# 左连接,根据左侧为准
print(pd.merge(df1,df2,how='left'))
'''
名字 性别 职称 课程
0 A 男 副教授 C++
1 A 男 副教授 数据结构
2 B 女 讲师 计算机导论
3 C 男 助教 NaN
4 D 男 教授 汇编
5 E 女 助教 NaN
'''
# 右连接,根据右侧为准
print(pd.merge(df1,df2,how='right'))
'''
名字 性别 职称 课程
0 A 男 副教授 C++
1 A 男 副教授 数据结构
2 B 女 讲师 计算机导论
3 D 男 教授 汇编
4 X NaN 讲师 马克思原理
'''
# 合并所有 取并集
print(pd.merge(df1,df2,how='outer'))
'''
名字 性别 职称 课程
0 A 男 副教授 C++
1 A 男 副教授 数据结构
2 B 女 讲师 计算机导论
3 C 男 助教 NaN
4 D 男 教授 汇编
5 E 女 助教 NaN
6 X NaN 讲师 马克思原理
'''
# 根据多个键进行连接
print(pd.merge(df1,df2,on=['职称','名字']))
'''
名字 性别 职称 课程
0 A 男 副教授 C++
1 A 男 副教授 数据结构
2 B 女 讲师 计算机导论
3 D 男 教授 汇编
'''
多层索引
这里简单介绍一下多层索引,多层级索引,将指标进行分层,索引具有层级结构,可以使得高维度的数据进行降维。
先来学习一下Series对象创建多层索引,并对索引对象查询。
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
# Series创建多层索引
s = Series(np.random.randint(0