pandas入门: 数据合并之--merge

pandas merge相关知识点总结。

  • 创建两个dataframe
df1 = pd.DataFrame({'A': [3, 4, 8, 9],
                   'B': [1.2, 2.4, 4.5, 7.3],
                   'C': ["aa", "bb", "cc", "dd"]})
df2 = pd.DataFrame({'B': [1.2, 2.2, 4.3, 7.3],
                   'C': ["ab", "bb", "cc", "dd"],
                    'D':[1, 2, 3, 4]})

结果如下:

   A    B   C
0  3  1.2  aa
1  4  2.4  bb
2  8  4.5  cc
3  9  7.3  dd
     B   C  D
0  1.2  ab  1
1  2.2  bb  2
2  4.3  cc  3
3  7.3  dd  4
  • 直接合并,采用默认的连接方式。默认采用inner连接方式,按照列名相同的列进行合并
result = pd.merge(df1, df2)

结果如下:

   A    B   C  D
0  9  7.3  dd  4
  • 指定on参数,以特定的列进行合并

on参数用于指定合并的基准列,按照设置的列名称进行合并,两个dataframe中除了on参数指定的列之外列名相同的列会变换名称后保留下来

result = pd.merge(df1, df2, on='B')

结果如下:

   A    B C_x C_y  D
0  3  1.2  aa  ab  1
1  9  7.3  dd  dd  4
  • how属性,指定连接方式

# innner: 默认的连接方式,共同的列必须完全相等

result = pd.merge(df1, df2, on='B', how='inner')

 结果如下:

   A    B C_x C_y  D
0  3  1.2  aa  ab  1
1  9  7.3  dd  dd  4

# outer: 共同列的值都会保留,两个dataframe在共同列上的差集,会对它们的缺失列项的值赋上NaN

result = pd.merge(df1, df2, on='B', how='outer')

结果如下:

     A    B  C_x  C_y    D
0  3.0  1.2   aa   ab  1.0
1  4.0  2.4   bb  NaN  NaN
2  8.0  4.5   cc  NaN  NaN
3  9.0  7.3   dd   dd  4.0
4  NaN  2.2  NaN   bb  2.0
5  NaN  4.3  NaN   cc  3.0

# left: 根据左边的dataframe确定共同列的保留值,右边缺失列的值赋为NaN

result = pd.merge(df1, df2, on='B', how='left')

结果如下:

   A    B C_x  C_y    D
0  3  1.2  aa   ab  1.0
1  4  2.4  bb  NaN  NaN
2  8  4.5  cc  NaN  NaN
3  9  7.3  dd   dd  4.0

# right: 根据右边的dataframe确定共同列的保留值,左边缺失列的值赋为NaN

result = pd.merge(df1, df2, on='B', how='right')

结果如下:

     A    B  C_x C_y  D
0  3.0  1.2   aa  ab  1
1  9.0  7.3   dd  dd  4
2  NaN  2.2  NaN  bb  2
3  NaN  4.3  NaN  cc  3
  • 多列合并
result = pd.merge(df1, df2, on=['B', 'C'], how='inner')

结果如下:

   A    B   C  D
0  9  7.3  dd  4
  • left_on 和 right_on

采用left_on 和 right_on对两个列名不同的dataframe合并

result = pd.merge(df1, df2, left_on='A', right_on='D', how='inner')

结果如下:

   A  B_x C_x  B_y C_y  D
0  3  1.2  aa  4.3  cc  3
1  4  2.4  bb  7.3  dd  4
  • 索引连接

采用left_index=True或者right_index=True使一个dataframe与另一个dataframe按照索引和列合并

如:df1的索引与df2的D列相同时合并

result = pd.merge(df1, df2, left_index=True, right_on='D')

结果如下:

   A  B_x C_x  B_y C_y  D
0  4  2.4  bb  1.2  ab  1
1  8  4.5  cc  2.2  bb  2
2  9  7.3  dd  4.3  cc  3
  • 相同的列重命名

采用suffixes属性为合并的两个dataframe的相同的列设置合并后相同列名的后缀

result = pd.merge(df1, df2, on='B', how='outer', suffixes=('_df1', '_df2'))

结果如下:

     A    B C_df1 C_df2    D
0  3.0  1.2    aa    ab  1.0
1  4.0  2.4    bb   NaN  NaN
2  8.0  4.5    cc   NaN  NaN
3  9.0  7.3    dd    dd  4.0
4  NaN  2.2   NaN    bb  2.0
5  NaN  4.3   NaN    cc  3.0

参考:

https://www.cnblogs.com/guxh/p/9451532.html

https://blog.csdn.net/Asher117/article/details/84725199

发布了79 篇原创文章 · 获赞 45 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/jp_666/article/details/104240039