代码示例:
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
#数据的拼接:concat
'''
axis=0 , join='inner' : 行上面进行伸缩,列的上面取交集
axis=0 , join='outer' : 行上面进行伸缩,列的上面取并集 等价于 df1.append(df2)
axis=1 , join='inner' : 列上面进行伸缩,行的上面取交集
axis=1 , join='outer' : 列上面进行伸缩,行的上面取并集
ignore_index: 指的是拼接后是否忽视原df各自的索引
'''
df1 = pd.DataFrame(np.arange(6).reshape(3,2),columns=['a','c'])
df2 = pd.DataFrame(np.arange(6).reshape(2,3),columns=['c','d','e'])
print(pd.concat([df1,df2]))
'''
打印:
a c d e
0 0.0 1 NaN NaN
1 2.0 3 NaN NaN
2 4.0 5 NaN NaN
0 NaN 0 1.0 2.0
1 NaN 3 4.0 5.0
'''
print(pd.concat([df1,df2],axis=0,join='outer'))
'''
打印:
a c d e
0 0.0 1 NaN NaN
1 2.0 3 NaN NaN
2 4.0 5 NaN NaN
0 NaN 0 1.0 2.0
1 NaN 3 4.0 5.0
'''
print(pd.concat([df1,df2],axis=1,join='inner'))
'''
打印:
a c c d e
0 0 1 0 1 2
1 2 3 3 4 5
'''
print(pd.concat([df1,df2],axis=0,join='outer',ignore_index=True))
'''
打印:
a c d e
0 0.0 1 NaN NaN
1 2.0 3 NaN NaN
2 4.0 5 NaN NaN
3 NaN 0 1.0 2.0
4 NaN 3 4.0 5.0
'''
#数据的合并:join。结果默认是以左表为基础显示,how='left' ,'right' ,'inner','outer'
df3=pd.DataFrame({'亮度':[1,3,5],'色度':[5,0,3]},index=list('abc'))
df4=pd.DataFrame({'饱和度':[1,9,8],'对比度':[6,6,7]},index=list('cde'))
print(df3.join(df4,how='outer'))
'''
打印:
亮度 色度 饱和度 对比度
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
'''
print(df3.join(df4,how='left'))
'''
打印:
亮度 色度 饱和度 对比度
a 1 5 NaN NaN
b 3 0 NaN NaN
c 5 3 1.0 6.0
'''
print(df3.join(df4,how='inner'))
'''
亮度 色度 饱和度 对比度
c 5 3 1 6
'''
#数据的合并:merge
'''
类似sql中的连接查询,on是连接字段,how='left' ,'right' ,'inner','outer' ,suffixes为两个DataFrame相同字段重命名规则。
on也可以指定多个字段,指定多个字段时,只有多个字段全部一样的条目才会组合到一起
on也可以区分left_on和right_on,比如pd.merge(df5,df6,left_on='名字',right_on='姓名'),应对合并DataFrame字段名字不一样的情况
'''
print('*'*30)
df5=pd.DataFrame({'名字':list('abcde'),'性别':['男','女','男','男','女'],'职称':['副教授','讲师','助教','教授','助教']},index=range(1001,1006))
print(df5)
'''
打印:
名字 性别 职称
1001 a 男 副教授
1002 b 女 讲师
1003 c 男 助教
1004 d 男 教授
1005 e 女 助教
'''
df6=pd.DataFrame({'名字':list('abdax'),'课程':['C++','计算机导论','汇编','数据结构','马克思原理'],'职称':['副教授','讲师','教授','副教授','讲师']},index=[1001,1002,1004,1001,6001])
print('*'*30)
print(df6)
'''
打印:
姓名 课程 职称
1001 a C++ 副教授
1002 b 计算机导论 讲师
1004 d 汇编 教授
1001 a 数据结构 副教授
6001 x 马克思原理 讲师
'''
print(pd.merge(df5,df6,on=['名字'],how='inner' ,suffixes=['_df1','_df2']))
'''
打印:
名字 性别 职称_df1 课程 职称_df2
0 a 男 副教授 C++ 副教授
1 a 男 副教授 数据结构 副教授
2 b 女 讲师 计算机导论 讲师
3 d 男 教授 汇编 教授
'''
print(pd.merge(df5,df6,on=['名字'],how='outer' ,suffixes=['_df1','_df2']))
'''
打印:
名字 性别 职称_df1 课程 职称_df2
0 a 男 副教授 C++ 副教授
1 a 男 副教授 数据结构 副教授
2 b 女 讲师 计算机导论 讲师
3 c 男 助教 NaN NaN
4 d 男 教授 汇编 教授
5 e 女 助教 NaN NaN
6 x NaN NaN 马克思原理 讲师
'''
print(pd.merge(df5,df6,on=['名字','职称'],how='left'))
'''
名字 性别 职称 课程
0 a 男 副教授 C++
1 a 男 副教授 数据结构
2 b 女 讲师 计算机导论
3 c 男 助教 NaN
4 d 男 教授 汇编
5 e 女 助教 NaN
'''