merge函数
'''
merge函数:
参数 说明
left 参与合并的左侧DataFrame
right 参与合并的右侧DataFrame
how “inner”,“outer(并集)”,“left”,“right"其中之一,默认为"inner”
on 用于连接的列名,必须存在于左右两个DataFrame,如果不指定会自动找一个重叠的列
left_on 左侧DataFrame中用作连接键的列
right_on 右侧DataFrame中用作连接键的列
left_index 是否将左侧的行索引用作其连接键
right_index 是否将右侧的行索引用作其连接键
sort 根据连接键对合并后的数据进行排列,默认为True
suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(’_x’,‘_y’)。如果左右两个DataFrame对象都有“data”,
则结果就会出现“data_x”和“data_y”
copy 默认为True。如果设置为False,可以避免将数据复制到结果数据结构中
'''
frame1=pd.DataFrame({
'a':range(5),
'b':range(5,0,-1),
'c':list('aaabb'),
'd':[1,1,1,2,2]
})
frame2=pd.DataFrame({
'a':range(6),
'e':range(6,0,-1),
})
new_frame=pd.merge(frame1,frame2,on='a',how='outer')
print(new_frame)
'''
a b c d e
0 0 5.0 a 1.0 6
1 1 4.0 a 1.0 5
2 2 3.0 a 1.0 4
3 3 2.0 b 2.0 3
4 4 1.0 b 2.0 2
5 5 NaN NaN NaN 1
'''
join函数
join:按照索引联合
frame1=pd.DataFrame({
'a':range(5),
'b':range(5,0,-1),
'c':list('aaabb'),
'd':[1,1,1,2,2]
})
frame2=pd.DataFrame({
'a':range(6),
'e':range(6,0,-1),
})
frame3=pd.DataFrame({
'f':range(6),
'g':range(6,0,-1),
},index=[1,3,4,7,8,9])
new_frame=frame1.join(frame2,rsuffix='_r',how='outer')
print(new_frame)
'''
a b c d a_r e
0 0.0 5.0 a 1.0 0 6
1 1.0 4.0 a 1.0 1 5
2 2.0 3.0 a 1.0 2 4
3 3.0 2.0 b 2.0 3 3
4 4.0 1.0 b 2.0 4 2
5 NaN NaN NaN NaN 5 1
'''
#如果连接的参数是列表,lsuffix与rsuffix参数失效,此时需保证列名不能重复,否则报错
new_frame2=frame1.join([frame2,frame3],how='outer')
concat函数
objs:需要连接的对象,可以为字典或列表
axis:轴向,默认为0
join:默认为“outer”。outer为联合,inner为交集。
ignore_index:不保留原索引,产生新索引,默认False
keys:指定分层索引
names:keys存在下,指定分层索引的层级名称
f1=pd.DataFrame(np.arange(6).reshape(3,2),index=list('abc'),columns=['one','two'])
f2=pd.DataFrame(np.arange(4).reshape(2,2),index=list('ac'),columns=['three','four'])
print(pd.concat([f1,f2],axis=1,sort=True))
'''
one two three four
a 0 1 0.0 1.0
b 2 3 NaN NaN
c 4 5 2.0 3.0
'''
print(pd.concat([f1,f2],axis=1,sort=True,keys=['f1','f2'],names=['lever1','lever2']))
'''
lever1 f1 f2
lever2 one two three four
a 0 1 0.0 1.0
b 2 3 NaN NaN
c 4 5 2.0 3.0
'''
数据重叠
'''
数据重叠:空值替换,有点映射的意思,以下例子,当f1中为空值,替换为f2的值,当f1,f2都有值,则不替换
'''
f1=pd.DataFrame({
'a':[0,np.nan,2],
'b':[1,1,np.nan],
'c':range(3)
})
f2=pd.DataFrame({
'a':[1,1,2],
'b':[2,2,4]
})
print(f1.combine_first(f2))
'''
a b c
0 0.0 1.0 0
1 1.0 1.0 1
2 2.0 4.0 2
'''