Python中数据合并concatenate,merge,concat,join等用法

转载地址

numpy中的concatenate()

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
       [3, 4, 6]])
 
注意:用到这个方法的时候很容易报dimensions不同的错误,有的需要更改demensions
可以使用下面的两种方法
# 给每一个元素增加[]
y_resamplednew  = y_resampled[:,np.newaxis]
print(y_resamplednew)
# 给最外层增加一个[]
y_resamplednew2 = y_resampled[np.newaxis,:]
print(y_resamplednew2)

pandas中的merge,concat,join

# In[]:数据的合并
# 1 ,merge,类似数据库中的
# (1)内连接,pd.merge(a1, a2, on='key')
# (2)左连接,pd.merge(a1, a2, on='key', how='left')
# (3)右连接,pd.merge(a1, a2, on='key', how='right')
# (4)外连接, pd.merge(a1, a2, on='key', how='outer')
data1 = pd.DataFrame(
    np.arange(0,16).reshape(4,4),
    columns=list('abcd')
)
data1
data2 = [
    [4,1,5,7],
    [6,5,7,1],
    [9,9,123,129],
    [16,16,32,1]
]
data2 = pd.DataFrame(data2,columns = ['a','b','c','d'])
data2
# 内连接 ,交集
pd.merge(data1,data2,on=['b'])
# 左连接 注意:如果 on 有两个条件,on = ['a','b']
# how = 'left','right','outer'
pd.merge(data1,data2,on='b',how='left')
 
# 2,append,相当于R中的rbind
# ignore_index = True:这个时候 表示index重新记性排列,而且这种方法是复制一个样本
data1.append(data2,ignore_index = True)
 
# 3,join
data2.columns=list('pown')
# 列名不能重叠:在这里的用法和R中rbind很像,但是join的用法还是相对麻烦的
result = data1.join(data2)
result
 
# 4,concat 这个方法能够实现上面所有的方法的效果
# concat函数是pandas底下的方法,可以把数据根据不同的轴进行简单的融合
# pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
#        keys=None, levels=None, names=None, verify_integrity=False)
 
# 参数说明:
# objs:series,dataframe,或者panel构成的序列list
# axis:0 行,1列
# join:inner,outer
 
# a,相同字段表首尾巴相接
data1.columns = list('abcd')
data2.columns =list('abcd')
data3 = data2
# 为了更好的查看连接后的数据来源,添加一个keys更好查看
pd.concat([data1,data2,data3],keys=['data1','data2','data3'])
 
# b ,列合并(也就是行对齐):axis = 1,
 
pd.concat([data1,data2,data3],axis = 1,keys = ['data1','data2','data3'])
 
data4 = data3[['a','b','c']]
# 在有些数据不存在的时候,会自动填充NAN
pd.concat([data1,data4])
 
# c:join:inner 交集,outer ,并集
pd.concat([data1,data4],join='inner')
 
# 在列名没有一个相同的时候会报错
# data4.index = list('mnp')
# pd.concat([data1,data4])
 
 
 
# In[]:我们再看其他的资料:################################
# 数据的规整化
 
###############################################################
############################合并数据集##########################
 
# pandas.merge;实现的就是数据库的操作,有点像sql的操作
# pandas.concat:可以沿着一条轴将多个对象堆叠到一起
 
# 一个简单的例子:
import pandas as pd
 
df1 = pd.DataFrame({'key':['b','b','a','c','a','a','b'],'data1':range(7)})
df2 = pd.DataFrame({'key':['a','b','d'],'data2':range(3)})
 
# merge默认是交集,如果没有指定哪个列进行连接,merge就会将重叠列的列名当做键
print(pd.merge(df1,df2))
print(pd.merge(df1,df2,on='key'))
 
# 如果两个对象的列名不同,也可以进行显示的指定
 
df3 = pd.DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1':range(7)})
df4 = pd.DataFrame({'rkey':['a','b','d'],'data2':range(3)})
 
print(pd.merge(df3,df4,left_on='lkey',right_on='rkey'))
 
# ########################## merge还有how = left,right,outer
print(pd.merge(df1,df2,how = 'left'))
 
# In[]:合并多个数据集,传入一个由列名组成的列表即可:
left = pd.DataFrame({'key1':['foo','foo','bar'],'key2':['one','two','one'],'lval':[1,2,3]})
right = pd.DataFrame({'key1':['foo','foo','bar','bar'],'key2':['one','one','one','two'],'lval':[4,4,6,7]})
 
print(left,'\n',right)
# outer相当于并集
print(pd.merge(left,right,on=['key1','key2'],how = 'outer'))
 
# 对于上面的代码,我们可以这样理解,多个键形成一系列元祖,并将其当做当个连接键进行连接(实际不是这样)
 
# In[]需要考虑的是重复列名的问题:
# 他会自动进行重新命名
print(pd.merge(left,right,on=['key1','key2'],how = 'inner'))
 
# 如果我们想自定义:(和原来的名字进行的叠加)
print(pd.merge(left,right,on=['key1','key2'],how = 'inner',suffixes = ('_left','_right')))
 
'''
merge:函数的参数:
on:用于连接的列名
left_on,right_on :左侧(右侧)用于连接键的列
left_index(right_index):将左(右)侧的行索引作为连接键
sort:对于合并后的数据进行排列,默认为true,对于数据量比较大的时候,把他设置为False,性能更好
suffixes:默认为('_x','_y')
copy:默认为True,可以改为False,数据量比较大时
'''
# In[]:索引上的合并:
left1 = pd.DataFrame({'key':['a','b','a','a','b','c'],'value':range(6)})
right1 = pd.DataFrame({'group_val':[3.5,7]},index=['a','b'])
 
print(pd.merge(left1,right1,left_on='key',right_index=True))
 
# 当然 对于通过索引的合并,DataFrame还有一个join方法,更加方便的实现索引的合并
print(left1.join(right1,how='outer'))
 
 
# In[] #################################################################################
# ****************************** 轴向连接concat **********************************
####################################################################################
 
s1 = pd.Series([0,1],index=['a','b'])
s2 = pd.Series([2,3,4],index=list('cde'))
s3 = pd.Series([5,6],index=list('fg'))
 
print(pd.concat([s1,s2,s3]))
 
s4 = pd.concat([s1*5,s3])
 
# join_axes指定轴上使用的索引,如果没有对应的,自动填充空值
print(pd.concat([s1,s4],axis=1,join_axes=[['a','c','b','e']]))
 
# ############################# 使用keys 可以区分拼接的数据来自哪里
result = pd.concat([s1,s2,s3],keys=['s1','s2','s3'])
print(result)
 
# 很多时候,通过concat的时候行索引可能会没有特别的意义,或者因为你索引类型不一样而没法concat的时候
# 我们需要使用 使用 ignore_index = True
 
result = pd.concat([s1,s2,s3],keys=['s1','s2','s3'],ignore_index=True)
print(result)
 
# In[]:################################
############# 重叠数据的合并处理:也就是在索引相同的时候,也可以直接使用concat
#  np.where :if-else的矢量化操作
import numpy as np
 
a = pd.Series([np.nan,2.5,np.nan,3.5,4.5,8],index=list('fedcba'))
b = pd.Series(np.arange(len(a),dtype=np.float64),index=list('fedcba'))
b[-1] = np.nan
 
print(a,'\n',b)
print(np.where(pd.isnull(a),b,a))
 
# print(pd.concat([a,b]))
print('/nn')
print(b.combine_first(a))

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,np.concatenate()函数是NumPy库的一个函数,用于连接(或拼接)多个数组。它的调用方法是numpy.concatenate((a1, a2, ...), axis=0, out=None),其a1, a2, ...表示要连接的多个数组,axis表示连接的方向,默认为0,即按行连接,out表示指定输出数组的可选参数。 举个例子来说明,假设有两个数组a和b,它们分别是: a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) 如果我们想要将数组a和数组b按行连接起来,可以使用np.concatenate()函数来实现,代码如下: c = np.concatenate((a, b), axis=0) print(c) 运行上述代码,输出结果为: [[1 2] [3 4] [5 6]] 可以看到,数组a和数组b被按行连接起来形成了一个新的数组c。 需要注意的是,np.concatenate()函数也可以用于连接多个数组,只需要将要连接的数组作为参数传递给函数即可。此外,还可以通过指定axis参数来控制连接的方向,axis=0表示按行连接,axis=1表示按列连接。 值得一提的是,在Python,除了np.concatenate()函数,还可以使用np.append()函数和pandas库的连接方法来实现数组的连接操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Pythonconcatenatemergeconcatjoin等多种连接函数的用法详解(含Python代码)](https://blog.csdn.net/wzk4869/article/details/127082443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [np.concatenate()函数](https://blog.csdn.net/u011699626/article/details/109095989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python数组拼接np.concatenate实现过程](https://download.csdn.net/download/weixin_38693311/14850802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值