pandas - concat函数

本文详细介绍了如何使用pandas在Python中进行DataFrame的纵向(axis=0)和横向(axis=1)合并,以及通过join参数实现外连接和内连接。此外,还讲解了ignore_index和keys选项的作用,以及在keys和levels使用场景。
import pandas as pd
df1 = pd.DataFrame(
    {
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B3"],
        "C": ["C0", "C1", "C2", "C3"],
        "D": ["D0", "D1", "D2", "D3"],
    },
    index=[0, 1, 2, 3],
)
df2 = pd.DataFrame(
    {
        "A": ["A4", "A5", "A6", "A7"],
        "B": ["B4", "B5", "B6", "B7"],
        "C": ["C4", "C5", "C6", "C7"],
        "D": ["D4", "D5", "D6", "D7"],
    },
    index=[4, 5, 6, 7],
)
df3 = pd.DataFrame(
    {
        "A": ["A8", "A9", "A10", "A11"],
        "B": ["B8", "B9", "B10", "B11"],
        "C": ["C8", "C9", "C10", "C11"],
        "D": ["D8", "D9", "D10", "D11"],
    },
    index=[8, 9, 10, 11],
)
df4 = pd.DataFrame(
    {
        "B": ["B2", "B3", "B6", "B7"],
        "D": ["D2", "D3", "D6", "D7"],
        "F": ["F2", "F3", "F6", "F7"],
    },
    index=[2, 3, 6, 7],
)

 参数

#ALL default
data = pd.concat([df1, df2], 
                 axis = 0, 
                 join = "outer",
                 ignore_index = False,
                 keys = None,
                 levels = None,
                 names = None,
                 verify_integrity = False,
                 copy = True
                )

axis = 0 纵向合并

df4 = pd.DataFrame(
    {
        "B": ["B2", "B3", "B6", "B7"],
        "D": ["D2", "D3", "D6", "D7"],
        "F": ["F2", "F3", "F6", "F7"],
    },
    index=[2, 3, 6, 7],
)
pd.concat([df1, df4], axis=0)

 

 axis = 1 横向合并

df4 = pd.DataFrame(
    {
        "B": ["B2", "B3", "B6", "B7"],
        "D": ["D2", "D3", "D6", "D7"],
        "F": ["F2", "F3", "F6", "F7"],
    },
    index=[2, 3, 6, 7],
)
pd.concat([df1, df4], axis=1)

 join = "outer" 纵向取并集

pd.concat([df1, df4], axis=0, join="outer")

 

 join = "inner" 纵向取交集

#保留相同的列索引。
pd.concat([df1, df4], axis=0, join="inner")

 

ignore_index=True

False可查看join = "outer" 纵向取并集

# True代表,两个dataframe合并之后,index不再使用各自的,而是相当于全体重置
pd.concat([df1,df4], axis=0, join="outer",ignore_index=True)

 keys 嗯,有点难以用语言表达,找个头头?

#可以用list
pd.concat([df1, df4], axis=0, join="outer",\
        ignore_index=False,keys=["DataFrame1","DataFrame2"])

#也可以用tuple
data2 = pd.concat([df1, df2, df4], axis=1, \
        join="outer",ignore_index=False,keys=\
        ("DataFrame1","DataFrame2","DataFrame4"))

data2.DataFrame1

#当keys有重复时,使用verify_interity 就护报错。
pd.concat([df1, df2, df4], axis=1, \
        join="outer",keys=("DataFrame1","DataFrame2",\
        'DataFrame2'),verify_integrity = True)

 

levels 我感觉没什么大用处,就没测(实际是测了也不知道有啥用)

names 用他前提是用levels,我跳

#当keys有重复时,使用verify_interity 就护报错。
pd.concat([df1, df2, df4], axis=1, \
        join="outer",keys=("DataFrame1","DataFrame2",\
        'DataFrame2'),verify_integrity = True)

 copy 感觉用处也不大,同样的的代码,运行出来效果差不多。

### pandas 中 `join` 方法的使用 Pandas 的 DataFrame 和 Series 提供了一个名为 `.join()` 的方法,用于基于索引将两个数据结构连接在一起。此功能类似于 SQL 中的 JOIN 操作,但它主要依赖于索引来执行匹配操作。 #### 基本语法 以下是 Pandas 中 `DataFrame.join()` 方法的基本语法[^1]: ```python DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) ``` - **other**: 要加入的另一个 DataFrame 或多个 DataFrame 列表。 - **on**: 如果需要指定要使用的列作为键,则可以设置该参数;默认情况下会使用调用对象的索引。 - **how**: 连接方式,默认为 `'left'`。可选值有: - `'left'`: 使用调用方的索引。 - `'right'`: 使用被调用方的索引。 - `'outer'`: 并集。 - `'inner'`: 交集。 - **lsuffix** 和 **rsuffix**: 当存在重复列名时,分别给左表和右表加上的后缀。 - **sort**: 是否对结果中的索引进行排序,默认不排序。 #### 示例代码 下面是一个简单的例子来展示如何使用 `join` 方法: ```python import pandas as pd # 创建第一个 DataFrame df1 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2'], }, index=['K0', 'K1', 'K2']) # 创建第二个 DataFrame df2 = pd.DataFrame({ 'B': ['B0', 'B1', 'B2'] }, index=['K0', 'K1', 'K3']) # 左连接 (default) result_left = df1.join(df2, how='left') print("Left Join:") print(result_left) # 右连接 result_right = df1.join(df2, how='right') print("\nRight Join:") print(result_right) # 外连接 result_outer = df1.join(df2, how='outer') print("\nOuter Join:") print(result_outer) # 内连接 result_inner = df1.join(df2, how='inner') print("\nInner Join:") print(result_inner) ``` 运行上述代码将会得到四种不同类型的连接结果,每种都展示了不同的行为模式[^2]。 #### 特殊情况处理 当两者的索引名称相同或者部分重叠时,可以通过调整 `lsuffix` 和 `rsuffix` 参数解决可能产生的冲突问题。例如,在某些场景下可能会遇到相同的列名,此时可通过如下方式进行区分: ```python df1.rename(columns={'A': 'Column_A'}, inplace=True) df2.rename(columns={'B': 'Column_B'}, inplace=True) merged_df = df1.join(df2, how="inner", lsuffix="_caller", rsuffix="_other") ``` 以上代码片段通过修改原始列名以及应用特定后缀解决了潜在的名字碰撞问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heianduck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值