• inner merge——关联列名一致:pd.merge()与dataframe.merge()
  1. pd.merge():查找两个DataFrame之间通用的列,然后,将匹配的行组合成新表中的行;
  2. 除了次之外,每个DataFrame都有自己的merge方法;且当我们需要将两个以上的DataFrame连接在一起时,我们选择这种“链接”方法
#两表联合
new_df = pd.merge(orders, customers)
new_df = orders.merge(customers)

#多表联合
big_df = orders.merge(customers).merge(products)
  • inner merge——关联的列名不一致

实际情况中,每张表中都可能有一个id命名的列,但是当我们想要关联两张表时,并不是想通过id这个字段关联,这个时候直接使用.merge()就有可能出现问题,所以需要我们重新命名id,方法有两种:

  1. 使用.rename({‘c1’:‘c2’})
  2. 使用关键字left_on并right_on指定我们要执行合并的列。返回id_x和id_y;为了友好阅读可以使用suffixes重新定义后缀x和y
    ** 之前的dataframe展示的时候,只会出现一次联建列;但是现在的情况由于没有重新命名,所以生成dataframe的时候就会有两个id列,数据会通过id_x和id_y来区别
import pandas as pd

orders = pd.read_csv('orders.csv')
products = pd.read_csv('products.csv')

# 在orders和products两张表中都有id;
# orders表中和products表相关联的列名实际上是:orders表中的products_id和products表中的id
# 所以我们将products表中的id重新命名

orders_products = pd.merge(
	orders,
	products.rename(columns={'id':'product_id'})
)

# 在orders和customers两张表中都有id;
# orders表中和products表相关联的列名实际上是:orders表中的customer_id和customers表中的id
# 所以根据表的顺序,分别定义需要联合的列名
# 但是新dataframe展示的是id_x和id_y,使用suffixes=['_order', '_customer']定义后缀xy

pd.merge(
    orders,
    customers,
    left_on='customer_id',
    right_on='id',
    suffixes=['_order', '_customer']
)
----------------------------------------------------------------------------
id_x	  customer_id	product_id	quantity	timestamp				id_y	customer_name		address			phone_number
1			2			3			1		2017-01-01 00:00:00			2			Jane Doe		456 Park Ave	949-867-5309
2			2			2			3		2017-01-01 00:00:00			2			Jane Doe		456 Park Ave	949-867-5309
3			3			1			1		2017-01-01 00:00:00			3			Joe Schmo		789 Broadway	112-358-1321


id_order	customer_id	product_id	quantity		timestamp			id_customer	customer_name	address			phone_number
1			2			3			1			2017-01-01 00:00:00		2			Jane Doe		456 Park Ave	949-867-5309
2			2			2			3			2017-01-01 00:00:00		2			Jane Doe		456 Park Ave	949-867-5309
3			3			1			1			2017-01-01 00:00:00		3			Joe Schmo		789 Broadway	112-358-1321
  • Outer Join

如果我们想要合并两张数据而不会丢失其中一个表中缺少的数据,我们可以使用 “外部联接”

  1. pd.merge(company_a, company_b, how=‘outer’):会将两表中,所有没有重叠的数据都重新展示
  2. pd.merge(company_a, company_b, how=‘left’):只将company_a没有被覆盖的数据展示出来
  3. pd.merge(company_a, company_b, how=“right”):只将company_b没有被覆盖的数据展示出来
  • 连接dataframe

数据通常被拆分为多个CSV文件,这时需要从多个较小的DataFrame重建单个DataFrame,使用方法:pd.concat([df1, df2, df2, …])

** 仅当所有DataFrame中的所有列都相同时,此方法才有效

import pandas as pd

bakery = pd.read_csv('bakery.csv')
print(bakery)
ice_cream = pd.read_csv('ice_cream.csv')
print(ice_cream)

menu=pd.concat([bakery,ice_cream])
print(menu)
08-11 08:14