df.merge on=["A"]与 on="A"效果是一样的吗?

85 阅读2分钟

在使用 pandas.merge() 时,on 参数指定了用于连接的列。如果在 on 参数中传递多个列(如 on=["A"])或单个列(如 on="A"),它们的行为应该是相同的,只是形式上有所不同。我们可以分析这两种写法的区别。

示例:on=["A"]on="A" 的差异

1. 使用 on=["A"]

on=["A"] 中,on 是一个列表,表示 A 列是连接的唯一列。即使这里只有一个列,传递它为列表形式,pandas.merge() 仍然可以正确处理。

2. 使用 on="A"

on="A" 中,on 是一个单独的列名,不需要用列表包裹。这是一个简化的形式,表示 A 列是连接的唯一列。

输出结果的差异

实际上,这两种写法等价的,无论是 on=["A"] 还是 on="A",都会基于列 A 执行合并。它们的输出结果是完全相同的。

示例代码

import pandas as pd

# 创建示例 DataFrame
df_A = pd.DataFrame({
    'A': [1, 2, 3],
    'B': ['X', 'Y', 'Z']
})

df_B = pd.DataFrame({
    'A': [1, 2, 4],
    'C': ['P', 'Q', 'R']
})

# 使用 on=["A"] 连接
df_merge_1 = df_A.merge(df_B, on=["A"], how="left")
print("Using on=['A']:\n", df_merge_1)

# 使用 on="A" 连接
df_merge_2 = df_A.merge(df_B, on="A", how="left")
print("Using on='A':\n", df_merge_2)
输出:
Using on=['A']:
    A  B    C
0  1  X    P
1  2  Y    Q
2  3  Z  NaN

Using on='A':
    A  B    C
0  1  X    P
1  2  Y    Q
2  3  Z  NaN

解释:

  • 这两个方法的输出是完全相同的,意味着 无论是使用 on=["A"] 还是 on="A",结果都没有差异
  • on=["A"]on="A" 的区别仅仅在于参数的类型:一个是列表,一个是字符串,但这不会影响合并的结果。

总结

  • on=["A"]on="A" 在执行合并时会得到相同的结果。
  • 如果只有一个列要合并,使用 on="A" 更为简洁。
  • on=["A"] 更适用于未来可能扩展为多个列的情况(例如,on=["A", "B"])。