Pandas(第十三集:DataFrame数据合并)


1. pd.concat()【数据合并】

1.1 源数据

def make_df(indexs, columns):
    data = [[str(j) + str(i) for j in columns] for i in indexs]
    df = pd.DataFrame(data=data, index=indexs, columns=columns)
    return df


df1 = make_df([1, 2], list('AB'))
df2 = make_df([3, 4], list('AB'))
df3 = make_df([1, 2, 3, 4], list('ABCD'))
df4 = make_df([2, 3, 4, 5], list('BCDE'))

在这里插入图片描述
在这里插入图片描述

1.2 上下合并

pd.concat([df1, df2], axis=0)

在这里插入图片描述

1.3 左右合并

pd.concat([df1, df2], axis=1)

在这里插入图片描述

1.4 outer外连接 并集 补NaN

pd.concat([df3, df4], join='outer')

在这里插入图片描述

1.5 inner内连接 交集 取公共部分

pd.concat([df3, df4], join='inner')

在这里插入图片描述

2.pd.merge()【数据合并】

2.1 源数据

# 类似于MySQL中表和表直接的合并
# merge与concat的区别在于,merge需要依据某一共同的行或列来进行合并
# 使用pd.merge()合并时,会自动根据两者相同columns名称的那一列,作为key来进行合并
# 每一列元素的顺序不要求一致
df1 = pd.DataFrame(
    {
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44],
        'id': [1, 2, 3]
    }
)
df2 = pd.DataFrame(
    {
        'id': [2, 3, 4],
        'sex': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)
df3 = pd.DataFrame(
    {
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44],
        'id': [1, 2, 2]
    }
)
df4 = pd.DataFrame(
    {
        'id': [2, 3, 4],
        'sex': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)
df5 = pd.DataFrame(
    {
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44],
        'id': [1, 2, 2]
    }
)
df6 = pd.DataFrame(
    {
        'id': [2, 2, 4],
        'sex': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 合并,只取交集【一对一】

pd.merge(df1, df2)

在这里插入图片描述

2.3 合并,只取交集【一对多】

pd.merge(df3, df4)

在这里插入图片描述

2.4 合并,只取交集【多对多】

pd.merge(df3, df4)

在这里插入图片描述

3.key()的规范化

# 当两个及以上的DataFrame合并时,有多列相同时使用
# on():当两边的列名一致时使用
# left_on()、right_one():当两边的列名不一致时使用

3.1 源数据

df1 = pd.DataFrame(
    {
        'id': [1, 2, 3],
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44]
    }
)
df2 = pd.DataFrame(
    {
        'id': [2, 3, 4],
        'name': ['张三', '李四', '王五'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)

在这里插入图片描述

3.2 合并时多列名称相同,需要指定一列作为连接的字段

pd.merge(df1, df2, on='id')
pd.merge(df1, df2, on='name')

在这里插入图片描述

3.3 如果没有相同的列名,则需要使用left_on、right_on来分别指出2个表中的不同列作为连接的字段

df1 = pd.DataFrame(
    {
        'id': [1, 2, 3],
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44]
    }
)
df2 = pd.DataFrame(
    {
        'id2': [2, 3, 4],
        'sex': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)

在这里插入图片描述

pd.merge(df1, df2, left_on='id', right_on='id2')

在这里插入图片描述

3.4 当左边的列和右边的index相同的时候,使用right_index=True作为连接字段

df1 = pd.DataFrame(
    {
        'id': [1, 2, 3],
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44]
    }
)
df2 = pd.DataFrame(
    {
        'id2': [2, 3, 4],
        'sex': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)

在这里插入图片描述

pd.merge(df1, df2, left_index=True, right_index=True)

在这里插入图片描述

3.5 左边的索引与右边的id2列进行连接,取交集

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

在这里插入图片描述

4. 合并方式

4.1 源数据

df1 = pd.DataFrame(
    {
        'id': [1, 2, 3],
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44]
    }
)
df2 = pd.DataFrame(
    {
        'id': [2, 3, 4],
        'sex': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)

在这里插入图片描述

4.2 默认是内连接 inner join,how='inner’默认

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

在这里插入图片描述

4.3 外合并:how=‘outer’:补NaN

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

在这里插入图片描述

4.4 左合并、右合并:how=‘left’,how=‘right’

pd.merge(df1, df2, how='left')
pd.merge(df1, df2, how='right')

在这里插入图片描述

5. 列冲突的解决

# 当列冲突时,即有多个列名称相同时,需要使用on=来指定哪一个列作为key,配合suffixes指定冲突列名
# 可以使用suffixes=自己指定后缀
# 相当于自定义名称冲突的列,在冲突的列后面增加一个后缀

5.1 源数据

df1 = pd.DataFrame(
    {
        'id': [1, 2, 3],
        'name': ['张三', '李四', '王五'],
        'age': [22, 33, 44]
    }
)
df2 = pd.DataFrame(
    {
        'id': [2, 3, 4],
        'name': ['男', '女', '男'],
        'job': ['Saler', 'CEO', 'Programer']
    }
)

5.2 列冲突的解决

pd.merge(df1, df2, on='id', suffixes=['_df1', '_df2'])

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataFramePandas 中用于处理表格数据的一种数据结构,它提供了很多方便的方法用于数据的处理和分析。以下是 DataFrame 常用的方法: 1. head(n):返回 DataFrame 的前 n 行数据,默认为前 5 行。 2. tail(n):返回 DataFrame 的后 n 行数据,默认为后 5 行。 3. info():打印 DataFrame 的基本信息,包括每数据类型、非空数量等。 4. describe():对 DataFrame 中的数值类型进行统计描述,包括计数、均值、标准差、最小值、最大值、四分位数等。 5. shape:返回 DataFrame 的行数和数。 6. columns:返回 DataFrame名。 7. index:返回 DataFrame 的行索引。 8. loc[]:根据行标签和标签选取数据,例如 df.loc[1, 'name'] 表示选取第一行的 name 数据。 9. iloc[]:根据行索引和索引选取数据,例如 df.iloc[1, 0] 表示选取第二行第一数据。 10. dropna():删除 DataFrame 中包含缺失值的行或。 11. fillna():将 DataFrame 中的缺失值填充为指定的值。 12. groupby():对 DataFrame 中的数据进行分组,例如 df.groupby('gender').mean() 表示按照 gender 进行分组并计算每组的均值。 13. merge():将两个 DataFrame 进行合并,例如 pd.merge(df1, df2, on='id') 表示按照 id 将 df1 和 df2 合并成一个 DataFrame。 14. pivot():将 DataFrame 进行透视操作,例如 df.pivot(index='date', columns='city', values='temperature') 表示将 DataFrame 按照 date 进行行分组,按照 city 进行分组,并将 temperature 的值填充到相应的位置上。 除了以上方法,DataFrame 还提供了很多其他的方法,用于数据的筛选、排序、重塑等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Monly21

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

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

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

打赏作者

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

抵扣说明:

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

余额充值