pandas数据连接
pd.merge
import pandas as pd
import numpy as np
df_obj1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
'data1' : np.random.randint(0,10,7)})
df_obj2 = pd.DataFrame({'key': ['a', 'b', 'd'],
'data2' : np.random.randint(0,10,3)})
print(df_obj1)
print('---------------')
print(df_obj2)
运行结果:
-
根据单个或多个键将不同的dataframe的行连接起来,类似于数据库中的连接操作
-
默认将重叠列的列名作为外键进行连接
# 默认将重叠列的列名作为“外键”进行连接 pd.merge(df_obj1, df_obj2)
运行结果:
-
on 显示指定外键
# on显示指定“外键” pd.merge(df_obj1, df_obj2, on='key')
运行结果:
-
left_on 左侧数据的外键
-
right_on 右侧数据的外键
# left_on,right_on分别指定左侧数据和右侧数据的“外键” # 更改列名 df_obj1 = df_obj1.rename(columns={'key':'key1'}) df_obj2 = df_obj2.rename(columns={'key':'key2'}) pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2')
运行结果:
-
-
默认是内连接(inner),即结果中的键是交集
-
how 用来指定连接方式
-
外连接(outer),结果中的键是并集
# “外连接” pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2', how='outer')
运行结果:
-
左连接(left)
# 左连接 pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2', how='left')
运行结果:
-
右连接(right)
# 右连接 pd.merge(df_obj1, df_obj2, left_on='key1', right_on='key2', how='right')
运行结果:
-
-
处理重复列名
# 处理重复列名 df_obj1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data' : np.random.randint(0,10,7)}) df_obj2 = pd.DataFrame({'key': ['a', 'b', 'd'], 'data' : np.random.randint(0,10,3)}) pd.merge(df_obj1, df_obj2, on='key', suffixes=('_left', '_right'))
运行结果:
- suffixes,默认为_x, _y
-
按索引连接
-
left_index = True 或right_index = True
# 按索引连接 df_obj1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1' : np.random.randint(0,10,7)}) df_obj2 = pd.DataFrame({'data2' : np.random.randint(0,10,3)}, index=['a', 'b', 'd']) pd.merge(df_obj1, df_obj2, left_on='key', right_index=True)
运行结果:
-