【python】pandas中dataframe连接及数组分割及合并

pandas中dataframe连接

concat操作

concat函数可以实现多个dataframe在横轴、纵轴进行拼接,concat函数的基本语法如下。

pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, 
names=None, verify_integrity=False, copy=True)

主要参数说明:

参数名称说明
objs接收多个Series,DataFrame,Panel的组合。表示参与链接的pandas对象的列表的组合。无默认。
axis接收0或1。表示连接的轴向,默认为0,即纵轴方向。
join接收inner或outer。表示其他轴向上的索引是按交集(inner)还是并集(outer)进行合并。默认为outer。
ignore_index重置拼接后的索引

接下来请看下面的例子,先创建两个dataframe
在这里插入图片描述

pd.concat([df_1,df_2],axis=0,join='outer')#默认按外连接拼接:并集

运行结果
在这里插入图片描述
当axis为0时,按照纵轴进行拼接,join为outer时取并集,表中缺失的赋值为Nan,在这里还可以使用ignore_index=True重置索引。

merge操作

主键合并,即通过一个或多个键将两个数据集的行连接起来,类似于SQL中的JOIN。针对同一个主键存在两张
包含不同字段的表,将其根据某几个字段一一对应拼接起来,结果集列数为两个元数据的列数和减去连接键
的数量。
在这里插入图片描述
和数据库的join一样,merge函数也有左连接(left)、右连接(right)、内连接(inner)和外连接(
outer),但比起数据库SQL语言中的join和merge函数还有其自身独到之处,例如可以在合并过程中对数
据集中的数据进行排序等。merge函数如下。

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, 
left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, 
indicator=False)

在这里插入图片描述

  • 键名一致时

先创建以下两个dataframe

import pandas as pd
import numpy as numpy
df1 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'foo','hoo'],'value': [1, 2, 3, 5,6]})
df2 = pd.DataFrame({'key': ['foo', 'bar', 'baz'],'value': [5, 6, 7]})

在这里插入图片描述

内连接

pd.merge(df1,df2,on='key')#内连接

保留key 列的交集,这些样本的其他特征都会保留。这里df1中字段key存在’foo’, ‘bar’, ‘baz’, ‘foo’,‘hoo’;df2中字段key中存在’foo’, ‘bar’, ‘baz’。因此交集为‘foo’, ‘bar’, ‘baz’, ‘foo’,故共保留4个样本。
在这里插入图片描述
外连接

pd.merge(df1,df2,on='key',how='outer')#外连接

与内连接相反,保留并集,不存在的特征会自动补充 nan。
在这里插入图片描述
左连接

pd.merge(df1,df2,on='key',how='left')#左连接

保留左表(df1)中的key字段的所有值,如果另外一个表没有左表字段key中的值,则赋值为nan。如这里df2表字段key没有值hoo,则对应的特征赋值为nan。
在这里插入图片描述
右连接

pd.merge(df1,df2,on='key',how='right')#右连接

保留左表(df1)中的key字段的所有值,如果另外一个表没有左表字段key中的值,则赋值为nan。如这里df2表字段key没有值hoo,则对应的特征赋值为nan。
在这里插入图片描述
注意 :如果两表的键名不一样时,需要把on换成left_onright_on

join操作

join方法也可以实现部分主键合并的功能,但是join方法使用时,两个主键的名字必须相同。

pandas.DataFrame.join(self, other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

numpy常见的数组合并及分割

组合数组

  • np.hstack((arr1,arr2))
    hstack函数实现数组横向组合,h为单词horizontal水平的
# 创建数组
np.random.seed(123)
arr_1 = np.random.randint(2,5,size=(2,2))
np.random.seed(123)
arr_2 = np.random.randint(1,4,size=(2,3))
np.random.seed(123)
arr_3 = np.random.randint(4,8,size=(3,3))
print(arr_1)
print(arr_2)
print(arr_3)

输出结果:
在这里插入图片描述
在这里插入图片描述

  • np.vstack((arr1,arr2))

使用vstack函数实现数组纵向组合,v为单词vertical垂直的

# 纵向组合数组
np.vstack((arr_2,arr_3))  # 纵向组合数组要求数组的列数保持一致

输出结果:
在这里插入图片描述

  • np.concatenate((arr1,arr2),axis ))

使用concatenate函数实现数组横、纵向组合,当axis为1时表示横向,为0表示纵向

切割数组

  • np.hsplit(ary, indices_or_sections)
    hsplit函数实现数组横向分割, indices_or_sections为列表包含的元素个数
# 横向分割
np.hsplit(arr_1,2)  # 返回一个列表,分割数组的个数依赖于数组本身的形状

输出结果:
在这里插入图片描述

  • np.vsplit(ary, indices_or_sections)
    vsplit函数实现数组纵向分割, indices_or_sections为列表包含的元素个数

  • np.split(ary, indices_or_sections, axis=0)
    axis=1表示横向分割,为0表示纵向分割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

~小黎同学~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值