这节主要学习:学习如何利用pandas中的merge整合多个DataFrame或者Series中的数据。
背景
看一个具体的例子。我们现在有2份数据,第1份数据存储的是订单信息,包含订单号、用户姓名、订单金额等。
第2份数据存储的是用户信息,包括用户姓名、电话号码、地址、用户的注册时间等信息。
现在有这样的需求,希望通过订单信息里的用户姓名,在用户信息里获得用户的电话号码、注册时间等信息。
会用merge函数解决
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
注:
left,right:用于连接的2个DataFrame,用左右来区分。注意merge函数一次只能连接2张表,如果需要连接多张表,可以连续使用多次merge函数。
on: 当两个DataFrame提供的合并列的列名称相同时,只设置on为合并列的列名称就可以。
left_on,right_on:当左右两个DataFrame提供的合并列的列名称不同时,适合使用这两个参数。
how:连接的方式可以是外连接、内连接、左连接、右连接,默认使用内连接。具体的区别稍后会重点展开。
格式:
df3=pd.merge(df1,df2,right_on='city',left_on='城市')
df3
同时出现在df1和df2中的城市(交集)
示例代码如下:
#merge内连接:同时出现在df1和df2中的城市
import pandas as pd
csv_file_price = 'E:/pycharm-workpace/data_analyze/num08/city_data.csv'
csv_file = 'E:/pycharm-workpace/data_analyze/num08/city.csv'
#准备数据
df_price=pd.read_csv(csv_file_price)
df_province=pd.read_csv(csv_file)
df1=df_price.iloc[0:10,0:3]
df2=df_province.iloc[2:10]
df3 = pd.merge(df1,df2,right_on='city',left_on='城市')
print(df3)
两者的并集
格式:
df3=pd.merge(df1,df2,left_on='城市',right_on='city',how='outer')
结果中数据,对应的是df1中所有城市的记录
格式:
#实现左连接
df3=pd.merge(df1,df2,left_on='城市',right_on='city',how='left')
结果包含的是右边dataframe(df2)的合并列对应的所有记录
格式:
#实现右连接
df3=pd.merge(df1,df2,left_on='城市',right_on='city',how='right')