Pandas merge()–合并两个DataFrame对象
时间:2020-02-23 14:42:08 来源:igfitidea点击:
Pandas DataFrame merge()函数用于通过数据库样式的合并操作合并两个DataFrame对象。
连接是对列或者索引执行的。
如果对列进行了连接,则索引将被忽略。
此函数返回一个新的DataFrame,而源DataFrame对象不变。
Pandas DataFrame merge()函数语法
merge()函数的语法为:
def merge(
self,
right,
how="inner",
on=None,
left_on=None,
right_on=None,
left_index=False,
right_index=False,
sort=False,
suffixes=("_x", "_y"),
copy=True,
indicator=False,
validate=None,
)
右:另一个与源DataFrame合并的DataFrame。
方式:{"左","右","外部","内部"},默认为"内部"。
这是定义合并操作类型的最重要参数。
这些类似于SQL左外部联接,右外部联接,完全外部联接和内部联接。on:要加入的列或者索引级别名称。
这些列必须同时存在于两个DataFrame中。
如果未提供,则使用两个DataFrame中列的交集。left_on:要在左侧DataFrame中加入的列或者索引级别名称。
right_on:要在右侧DataFrame中加入的列或者索引级别名称。
left_index:使用左侧DataFrame中的索引作为连接键。
right_index:使用右侧DataFrame中的索引作为连接键。
sort:在结果DataFrame中按字典顺序对联接键进行排序。
后缀:后缀分别应用于左侧和右侧的重叠列名称。
指标:如果为True,则在输出数据帧中添加一列,称为" _merge",其中包含有关每一行源的信息。
validate:用于验证合并过程。
有效值为{" one_to_one"或者" 1:1"," one_to_many"或者" 1:m"," many_to_one"或者" m:1"," many_to_many"或者" m:m"}。
Pandas DataFrame merge()示例
让我们看一些合并两个DataFrame对象的示例。
1.默认合并–内部联接
import pandas as pd
d1 = {'Name': ['hyman', 'Meghna', 'Lisa'], 'Country': ['San Franceco', 'San Franceco', 'USA'], 'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
print('DataFrame 1:\n', df1)
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['hyman', 'Anupam', 'Amit']})
print('DataFrame 2:\n', df2)
df_merged = df1.merge(df2)
print('Result:\n', df_merged)
输出:
DataFrame 1:
Name Country Role
0 hyman San Franceco CEO
1 Meghna San Franceco CTO
2 Lisa USA CTO
DataFrame 2:
ID Name
0 1 hyman
1 2 Anupam
2 3 Amit
Result:
Name Country Role ID
0 hyman San Franceco CEO 1
2.使用左,右和外部联接合并数据框
print('Result Left Join:\n', df1.merge(df2, how='left'))
print('Result Right Join:\n', df1.merge(df2, how='right'))
print('Result Outer Join:\n', df1.merge(df2, how='outer'))
输出:
Result Left Join:
Name Country Role ID
0 hyman San Franceco CEO 1.0
1 Meghna San Franceco CTO NaN
2 Lisa USA CTO NaN
Result Right Join:
Name Country Role ID
0 hyman San Franceco CEO 1
1 Anupam NaN NaN 2
2 Amit NaN NaN 3
Result Outer Join:
Name Country Role ID
0 hyman San Franceco CEO 1.0
1 Meghna San Franceco CTO NaN
2 Lisa USA CTO NaN
3 Anupam NaN NaN 2.0
4 Amit NaN NaN 3.0
3.在特定列上合并DataFrame
import pandas as pd
d1 = {'Name': ['hyman', 'Meghna', 'Lisa'], 'ID': [1, 2, 3], 'Country': ['San Franceco', 'San Franceco', 'USA'],
'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['hyman', 'Anupam', 'Amit']})
print(df1.merge(df2, on='ID'))
print(df1.merge(df2, on='Name'))
输出:
Name_x ID Country Role Name_y 0 hyman 1 San Franceco CEO hyman 1 Meghna 2 San Franceco CTO Anupam 2 Lisa 3 USA CTO Amit Name ID_x Country Role ID_y 0 hyman 1 San Franceco CEO 1
4.指定用于合并DataFrame对象的左列和右列
import pandas as pd
d1 = {'Name': ['hyman', 'Meghna', 'Lisa'], 'ID1': [1, 2, 3], 'Country': ['San Franceco', 'San Franceco', 'USA'],
'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame({'ID2': [1, 2, 3], 'Name': ['hyman', 'Anupam', 'Amit']})
print(df1.merge(df2))
print(df1.merge(df2, left_on='ID1', right_on='ID2'))
输出;
Name ID1 Country Role ID2 0 hyman 1 San Franceco CEO 1 Name_x ID1 Country Role ID2 Name_y 0 hyman 1 San Franceco CEO 1 hyman 1 Meghna 2 San Franceco CTO 2 Anupam 2 Lisa 3 USA CTO 3 Amit
5.使用索引作为合并数据帧的联接键
import pandas as pd
d1 = {'Name': ['hyman', 'Meghna', 'Lisa'], 'Country': ['San Franceco', 'San Franceco', 'USA'], 'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['hyman', 'Anupam', 'Amit']})
df_merged = df1.merge(df2)
print('Result Default Merge:\n', df_merged)
df_merged = df1.merge(df2, left_index=True, right_index=True)
print('\nResult Index Merge:\n', df_merged)
输出:
Result Default Merge:
Name Country Role ID
0 hyman San Franceco CEO 1
Result Index Merge:
Name_x Country Role ID Name_y
0 hyman San Franceco CEO 1 hyman
1 Meghna San Franceco CTO 2 Anupam
2 Lisa USA CTO 3 Amit

