合并数据
有三种合并数据方法:
- 横向或纵向堆叠合并数据
- 主键合并数据
- 重叠合并数据
(1.横向堆叠
#横向堆叠
import numpy as py
import pandas as pd
detail=pd.read_excel('C:/data/meal_order_detail.xlsx')
df1=detail.iloc[:,:10]
df2=detail.iloc[:,:10]
print('合并df1的大小为%s,df2的大小为%s。'%(df1.shape,df2.shape))
print('外连接合并后的数据框大小为:',pd.concat([df1,df2],axis=1,join='outer').shape)
print('内连接合并后的数据框大小为:',pd.concat([df1,df2],axis=1,join='inner').shape)
(2.纵向堆叠
#纵向堆叠
#使用concat函数和append方法 实现纵向堆叠
#表名完全相同时的concat纵向堆叠
df3=detail.iloc[:1500,:] #前1500行数据
df4=detail.iloc[1500:,:]#后1500行数据
print(df3)
print(df4)
print('合并df3的大小为%s。df4的大小为%s。'%(df3.shape,df4.shape))
print('内连接纵向合并后的数据大小为:',pd.concat([df3,df4],axis=1,join='outer').shape)
print('内连接纵向合并后的数据为:',pd.concat([df3,df4],axis=1,join='outer'))
print('外连接纵向合并后的数据大小为:',pd.concat([df3,df4],axis=1,join='inner').shape)
print('外连接纵向合并后的数据为:',pd.concat([df3,df4],axis=1,join='inner'))
#使用append方法
print('合并df3的大小为%s。df4的大小为%s。'%(df3.shape,df4.shape))
print('append纵向堆叠后的数据大小为:',df3.append(df4).shape)
(3.主键合并数据(
#主键合并数据(pandas 库中merge和join函数 实现主键合并)
#使用merge函数合并数据表
order=pd.read_csv('C:/data/meal_order_info.csv',encoding='gbk')
order['info_id'] = order['info_id'].astype('str')
order_detail=pd.merge(detail,order,left_on='order_id',right_on='info_id')
print('detail订单表的原始形状为:',detail.shape)
print('order订单信息表的原始形状为:',order.shape)
print('订单详情表和订单信息表主键合并之后的形状:',order_detail.shape)
#使用join函数合并数据表
order.rename({'info_id':'order_id'},inplace=True)
order_detail=detail.join(order,on='order_id',rsuffix='1')
print('订单详情表和订单信息表 join 合并后的形状为:',order_detail.shape)
(4.重叠合并数据
#建立两个字典,除了ID 外,别的特征互补
import numpy as np
import pandas as pd
dict1={'ID':[1,2,3,4,5,6,7,8,9],
'System':['win10','win10',np.nan,'win10',np.nan,np.nan,'win7','win7','win8'],
'cpu':['i7','i5',np.nan,'i7',np.nan,np.nan,'i5','i5','i3']
}
dict2={'ID':[1,2,3,4,5,6,7,8,9],
'System':[np.nan,np.nan,'win7',np.nan,'win8','win7',np.nan,np.nan,np.nan],
'cpu':[np.nan,np.nan,'i3',np.nan,'i7','i5',np.nan,np.nan,np.nan]
}
df5=pd.DataFrame(dict1)
df6=pd.DataFrame(dict2)
print('经过重叠合并后的数据为:\n',df5.combine_first(df6))