第四章. Pandas进阶
4.6 数据合并
数据合并主要使用的是Merge方法和Concat方法
1.数据合并(merge函数)
1).语法:
pandas.merge(right,how=‘inner’, on=“None”, left_on=“None”, right_on=“None”, left_index=False, right_index=False... )
参数说明:
right:合并对象,Series或DataFrame
how:合并类型,可以是left(左合并), right(右合并), outer(外合并), inner(内合并)
on:联接的列或者索引级别名称
left_on:左数据集联接的列或者索引级别名称
right_on:右数据集联接的列或者索引级别名称
left_index:使用左数据集的索引作为连接键(bool类型)
right_index:使用右数据集的索引作为连接键(bool类型)
2).示例
- 示例1:常规合并
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True) # 处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True) # 无法对齐主要是因为列标题是中文
df1 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet1')
print(df1)
print('*' * 50)
df2 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet2')
print(df2)
print('*' * 50)
df_merge1 = pd.merge(df1, df2, on='序号', how='left')
print(df_merge1)
结果展示:
- 示例2:多对一的数据合并:
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True) # 处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True) # 无法对齐主要是因为列标题是中文
df1 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet1')
print(df1)
print('*' * 50)
df2 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet2')
print(df2)
print('*' * 50)
df_merge1 = pd.merge(df1, df2, on='序号')
print(df_merge1)
结果展示:
- 示例3:多对多的数据合并:
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True) # 处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True) # 无法对齐主要是因为列标题是中文
df1 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet1')
print(df1)
print('*' * 50)
df2 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet2')
print(df2)
print('*' * 50)
df_merge1 = pd.merge(df1, df2, on='序号')
print(df_merge1)
结果展示:
2.数据合并(Concat函数)
1).语法:
pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None,verify_integrity=False,sort=False, copy=True):
参数说明:
objs:合并对象,Series或DataFrame
axis:0:代表列;1:代表行;默认0
join:inner:交集 outer:并集
2).示例
- 示例1:相同字段的表首尾相连
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True) # 处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True) # 无法对齐主要是因为列标题是中文
df1 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet1')
print(df1)
print('*' * 50)
df2 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet2')
print(df2)
print('*' * 50)
df_concat1 = pd.concat([df1, df2], keys=['Sheet1', 'Sheet2'])
print(df_concat1)
结果展示:
- 示例2:横向表对齐(行对齐)
import pandas as pd
pd.set_option('display.unicode.ambiguous_as_wide', True) # 处理数据的列标题与数据无法对齐的情况
pd.set_option('display.unicode.east_asian_width', True) # 无法对齐主要是因为列标题是中文
df1 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet1')
print(df1)
print('*' * 50)
df2 = pd.read_excel('F:\\Note\\图书采购清单.xlsx', sheet_name='Sheet3')
print(df2)
print('*' * 50)
df_concat1 = pd.concat([df1, df2], keys=['Sheet1', 'Sheet3'], axis=1)
print(df_concat1)
结果展示: