pandas 提供了功能齐全且高性能的连接操作,其性能明显优于其他开源工具。合并操作包括 DataFrame 或命名 Series 的数据库风格的连接,这些方法与 SQL 关系型数据库类似。merge() 函数提供了一系列标准的数据库连接操作,支持 DataFrame 或命名 Series 之间的合并。在 0.23.0 版本开始,on, left_on 和 right_on 参数支持指定索引的级别,并在 0.24.0 版本支持对命名 Series 的合并。merge() 函数是 pandas 的顶层方法,也可作为 DataFrame 对象的实例方法使用,隐式将 DataFrame 对象视为连接的左侧对象。相关的 join() 方法基于 merge 实现,用于索引和索引、列和索引的连接。如果仅需通过索引来连接,使用 join() 可以减少输入。
merge 函数简要入门,将 DataFrame 视为 SQL 的表,熟悉 SQL 的用户会对其术语感到熟悉。在进行列与列的合并时,用于连接的 DataFrame 对象上的索引都会被丢弃。merge 的 how 参数决定了什么样的键应该包含在结果中,包括 inner、outer、left 和 right 等连接方式。如果 MultiIndex 的级别名称与 DataFrame 中的列名相对应,可以合并一个 MultiIndex 的 Series 和 DataFrame。在合并之前,可以使用 Series.reset_index() 将 Series 转换为 DataFrame。
merge 函数可以处理重复的键,通过 validate 参数自动检查合并键中的重复项,防止内存溢出,确保数据结构符合预期。如果 right 中存在重复值,validate 参数中指定的方式将引发异常。用户可以使用 validate='one_to_many' 参数代替,避免异常。merge 函数还接受一个 indicator 参数,如果为 True,则在输出对象中添加一个名为 _merge 的分类型列。indicator 参数也可以接受字符串,使用传递的字符串的值作为 indicator 列的名称。
merge 操作保留连接键的数据类型,如果引入缺失值,数据类型会发生向上转换。merge 还能够保留 category 类型。DataFrame.join() 是一个简便的方法,通过索引连接两个 DataFrame 对象,实现相同功能但需要更多代码。join() 接受 on 参数指定用于连接的列名或列名列表,实现多对一或多个键连接,DataFrame.join 默认执行 left join,实现其他连接也很方便。
连接操作支持单索引与层次索引的连接,将单索引与层次索引的某一级别连接。两个 MultiIndex 的连接受到限制,要求 right 对象的索引是 left 对象索引的子集。如果连接两个具有层次索引的 DataFrame,可以使用特定代码。列名与索引的组合可以进行连接,通过 on、left_on 和 right_on 参数传递字符串,无需重置索引。如果用于连接的字符串名称既匹配了索引级别名,又匹配了列名,将会引发警告并有效使用列名。
merge 的 suffix 参数接受字符串元组列表,作为合并结果中相同列名的后缀,便于区分列来自哪个 DataFrame。merge 函数也可以处理交叠的列,使用 suffix 参数接受字符串元组列表。在连接多个 DataFrame 时,可以将 DataFrame 列表或元组传递给 join() 方法,根据它们的索引连接在一起。另外,处理两个具有相似索引的 Series 或 DataFrame 对象,希望用一个对象的值来修复另一个对象中对应位置的值,可以使用 combine_first() 方法实现修复。注意,这个方法仅当 left 对象中存在缺失值时,用 right 对象中对应位置的值来替换。相关的方法 update() 在原地修改并替换非缺失值。
温馨提示:答案为网友推荐,仅供参考