DataFrame.merge() 是 pandas 库中用于合并两个DataFrame数据的方法。该方法主要用于根据一个或多个键(键可以是列名或索引)将两个 DataFrame 连接在一起,这个过程类似于 SQL 中的 JOIN 操作。
#我的Python教程
#微信公众号:wdPython
1.下面是 DataFrame.merge() 的一些常用参数:
left_on:指定左侧 DataFrame 的键。这可以是列名。默认为 None。
right_on:指定右侧 DataFrame 的键。这可以是列名。默认为 None。
how:指定连接类型。可以是 ‘left’(左连接)、‘right’(右连接)、‘outer’(全连接)或 ‘inner’(内连接,默认)。
indicator:在合并后的 DataFrame 中添加一个指示列,指示哪些行来自左侧 DataFrame,哪些行来自右侧 DataFrame。
sort:对结果进行排序。默认为 False。
suffixes:当左右两个 DataFrame 的键相同时,为避免重复,需要添加后缀。这是一个由两个字符串组成的元组,分别用于左侧和右侧 DataFrame。
copy:是否复制数据。默认为 True。
indicator:是否添加指示列。默认为 False。
validate:用于检查合并操作是否合理的参数。默认为 None。
2.示例用法:现在,我们有两个DataFrame:df1和df2。它们都有一个名为’诗人’的列。我们想要将这两个DataFrame按照’诗人’列进行合并,并得到每个人的名字,性别,年龄和朝代。
import pandas as pddata1 = {'诗人': ['李白', '苏轼', '李清照', '杜甫', '岳飞'],'朝代': ['唐', '北宋', '宋', '唐', '南宋']}print('原始DataFrame数据1'.center(40, '-'))
df1 = pd.DataFrame(data1)
print(df1)data2 = {'诗人': ['李清照', '杜甫', '李白', '苏轼'],'性别': ['女', '男', '男', '男'],'芳龄': [15, 13, 18, 27]}
print('原始DataFrame数据2'.center(40, '-'))
df2 = pd.DataFrame(data2)
print(df2)
print('1.inner(内连接),是默认参数合并数据'.center(40, '-'))
merged_df = df1.merge(df2, on='诗人', how='inner')
print(merged_df)print('2.outer全连接,合并数据'.center(40, '-'))
merged_df = df1.merge(df2, on='诗人', how='outer')
print(merged_df)print('3.left(左连接)合并数据'.center(40, '-'))
merged_df = df1.merge(df2, on='诗人', how='left')
print(merged_df)print('4.right(右连接)合并数据'.center(40, '-'))
merged_df = df1.merge(df2, on='诗人', how='right')
print(merged_df)
输出结果:我们通过on='诗人’参数指定了要按照’诗人’列进行合并。默认情况下,merge()方法会使用内连接(inner join),只会保留两个DataFrame中都有的行。如果你想要保留两个DataFrame中的所有行,可以使用how='outer’参数来执行外连接(outer join)。
-------------原始DataFrame数据1-------------诗人 朝代
0 李白 唐
1 苏轼 北宋
2 李清照 宋
3 杜甫 唐
4 岳飞 南宋
-------------原始DataFrame数据2-------------诗人 性别 芳龄
0 李清照 女 15
1 杜甫 男 13
2 李白 男 18
3 苏轼 男 27
------------1.inner(内连接,是默认参数)合并数据------------诗人 朝代 性别 芳龄
0 李白 唐 男 18
1 苏轼 北宋 男 27
2 李清照 宋 女 15
3 杜甫 唐 男 13
-------------2.outer全连接合并数据-------------诗人 朝代 性别 芳龄
0 李白 唐 男 18.0
1 苏轼 北宋 男 27.0
2 李清照 宋 女 15.0
3 杜甫 唐 男 13.0
4 岳飞 南宋 NaN NaN
---------3.left(左连接)合并数据----------诗人 朝代 性别 芳龄
0 李白 唐 男 18.0
1 苏轼 北宋 男 27.0
2 李清照 宋 女 15.0
3 杜甫 唐 男 13.0
4 岳飞 南宋 NaN NaN
------------4.right(右连接)合并数据------------诗人 朝代 性别 芳龄
0 李清照 宋 女 15
1 杜甫 唐 男 13
2 李白 唐 男 18
3 苏轼 北宋 男 27
3.关于参数how用于指定连接类型理解:
‘left’:左连接,这是默认值。只保留左侧DataFrame中的所有行,如果在键列中没有匹配的行,则填充NaN。
‘right’:右连接。只保留右侧DataFrame中的所有行,如果在键列中没有匹配的行,则填充NaN。
‘outer’:全连接。保留左侧和右侧DataFrame中的所有行,如果在键列中没有匹配的行,则填充NaN。
‘inner’:内连接。只保留在键列中同时出现在左侧和右侧的行。
完毕!!感谢您的收看
----------★★历史博文集合★★----------
我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具