文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

pandas.concat方法怎么在Python3中使用

2023-06-07 14:13

关注

pandas.concat方法怎么在Python3中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

python可以做什么

Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入门、功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析,人工智能,Web开发等。

pandas.merge参数列表如下图,其中只有objs是必须得参数,另外常用参数包括objs、axis、join、keys、ignore_index。

pandas.concat方法怎么在Python3中使用

pd.concat([df1,df2,df3]), 默认axis=0,在0轴上合并。

pandas.concat方法怎么在Python3中使用

pd.concat([df1,df4],axis=1)–在1轴上合并

pandas.concat方法怎么在Python3中使用

pd.concat([df1,df2,df3],keys=[‘x', ‘y', ‘z'])–合并时便于区分建立层次化索引。

pandas.concat方法怎么在Python3中使用

pd.concat([df1, df4], axis=1, join=‘inner')–采用内连接合并,join默认为outer外连接。

pandas.concat方法怎么在Python3中使用

pd.concat([df1, df4], ignore_index=True)–当原来DataFrame的索引没有意义的时候,concat之后可以不需要原来的索引。

pandas.concat方法怎么在Python3中使用

姊妹篇:pandas.merge用法详解!!!

补充:python3:pandas(合并concat和merge)

pandas处理多组数据的时候往往会要用到数据的合并处理,其中有三种方式,concat、append和merge。

1、concat

用concat是一种基本的合并方式。而且concat中有很多参数可以调整,合并成你想要的数据形式。axis来指明合并方向。axis=0是预设值,因此未设定任何参数时,函数默认axis=0。(0表示上下合并,1表示左右合并)

import pandas as pdimport numpy as np #定义资料集df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d']) #concat纵向合并res = pd.concat([df1, df2, df3], axis=0) #打印结果print(res)''' a b c d0 0.0 0.0 0.0 0.01 0.0 0.0 0.0 0.02 0.0 0.0 0.0 0.00 1.0 1.0 1.0 1.01 1.0 1.0 1.0 1.02 1.0 1.0 1.0 1.00 2.0 2.0 2.0 2.01 2.0 2.0 2.0 2.02 2.0 2.0 2.0 2.0'''

上述index为0,1,2,0,1,2形式。为什么会出现这样的情况,其实是仍然按照合并前的index组合起来的。若希望递增,请看下面示例:

ignore_index (重置 index)

重置后的index为0,1,……8

res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)# 将ignore_index设置为True print(res) #打印结果''' a b c d0 0.0 0.0 0.0 0.01 0.0 0.0 0.0 0.02 0.0 0.0 0.0 0.03 1.0 1.0 1.0 1.04 1.0 1.0 1.0 1.05 1.0 1.0 1.0 1.06 2.0 2.0 2.0 2.07 2.0 2.0 2.0 2.08 2.0 2.0 2.0 2.0'''

join (合并方式)

join='outer'为预设值,因此未设定任何参数时,函数默认join='outer'。此方式是依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。

import pandas as pdimport numpy as np #定义资料集df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4]) res = pd.concat([df1, df2], axis=0, join='outer') #纵向"外"合并df1与df2 print(res)''' a b c d e 1 0.0 0.0 0.0 0.0 NaN 2 0.0 0.0 0.0 0.0 NaN 3 0.0 0.0 0.0 0.0 NaN 2 NaN 1.0 1.0 1.0 1.0 3 NaN 1.0 1.0 1.0 1.0 4 NaN 1.0 1.0 1.0 1.0'''res = pd.concat([df1, df2], axis=0, join='inner') #纵向"内"合并df1与df2 #打印结果print(res)''' b c d 1 0.0 0.0 0.0 2 0.0 0.0 0.0 3 0.0 0.0 0.0 2 1.0 1.0 1.0 3 1.0 1.0 1.0 4 1.0 1.0 1.0'''

join_axes (依照 axes 合并)

import pandas as pdimport numpy as np #定义资料集df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4]) #依照`df1.index`进行横向合并res = pd.concat([df1, df2], axis=1, join_axes=[df1.index]) #打印结果print(res)# a b c d b c d e# 1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN# 2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0# 3 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0

上述脚本中,join_axes=[df1.index]表明按照df1的index来合并,可以看到结果中去掉了df2中出现但df1中没有的index=4这一行。

2、append (添加数据)

append只有纵向合并,没有横向合并。

import pandas as pdimport numpy as np #定义资料集df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])df3 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])s1 = pd.Series([1,2,3,4], index=['a','b','c','d']) #将df2合并到df1的下面,以及重置index,并打印出结果res = df1.append(df2, ignore_index=True)print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 1.0 1.0 1.0# 4 1.0 1.0 1.0 1.0# 5 1.0 1.0 1.0 1.0 #合并多个df,将df2与df3合并至df1的下面,以及重置index,并打印出结果res = df1.append([df2, df3], ignore_index=True)print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 1.0 1.0 1.0# 4 1.0 1.0 1.0 1.0# 5 1.0 1.0 1.0 1.0# 6 1.0 1.0 1.0 1.0# 7 1.0 1.0 1.0 1.0# 8 1.0 1.0 1.0 1.0 #合并series,将s1合并至df1,以及重置index,并打印出结果res = df1.append(s1, ignore_index=True)print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 2.0 3.0 4.0

3、merge

根据两组数据中的关键字key来合并(key在两组数据中是完全一致的)。

3.1依据一组key合并

import pandas as pd #定义资料集并打印出left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],    'A': ['A0', 'A1', 'A2', 'A3'],    'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],    'C': ['C0', 'C1', 'C2', 'C3'],    'D': ['D0', 'D1', 'D2', 'D3']})print(left)# A B key# 0 A0 B0 K0# 1 A1 B1 K1# 2 A2 B2 K2# 3 A3 B3 K3 print(right)# C D key# 0 C0 D0 K0# 1 C1 D1 K1# 2 C2 D2 K2# 3 C3 D3 K3 #依据key column合并,并打印出res = pd.merge(left, right, on='key') print(res) A B key C D# 0 A0 B0 K0 C0 D0# 1 A1 B1 K1 C1 D1# 2 A2 B2 K2 C2 D2# 3 A3 B3 K3 C3 D3

3.2 根据两组key合并

合并时有4种方法how = ['left', 'right', 'outer', 'inner'],预设值how='inner'。

inner:按照关键字组合之后,去掉组合中有合并项为NaN的行。

outer :保留所有组合

left:仅保留左边合并项为NaN的行

right:仅保留右边合并项为NaN的行

import pandas as pdimport numpy as np #定义资料集并打印出left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],   'key2': ['K0', 'K1', 'K0', 'K1'],   'A': ['A0', 'A1', 'A2', 'A3'],   'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],   'key2': ['K0', 'K0', 'K0', 'K0'],   'C': ['C0', 'C1', 'C2', 'C3'],   'D': ['D0', 'D1', 'D2', 'D3']}) print(left)''' key1 key2 A B0 K0 K0 A0 B01 K0 K1 A1 B12 K1 K0 A2 B23 K2 K1 A3 B3'''print(right)''' key1 key2 C D0 K0 K0 C0 D01 K1 K0 C1 D12 K1 K0 C2 D23 K2 K0 C3 D3''' #依据key1与key2 columns进行合并,并打印出四种结果['left', 'right', 'outer', 'inner']res = pd.merge(left, right, on=['key1', 'key2'], how='inner')print(res)''' key1 key2 A B C D0 K0 K0 A0 B0 C0 D01 K1 K0 A2 B2 C1 D12 K1 K0 A2 B2 C2 D2'''res = pd.merge(left, right, on=['key1', 'key2'], how='outer')print(res)''' key1 key2 A B C D0 K0 K0 A0 B0 C0 D01 K0 K1 A1 B1 NaN NaN2 K1 K0 A2 B2 C1 D13 K1 K0 A2 B2 C2 D24 K2 K1 A3 B3 NaN NaN5 K2 K0 NaN NaN C3 D3'''res = pd.merge(left, right, on=['key1', 'key2'], how='left')print(res) ''' key1 key2 A B C D0 K0 K0 A0 B0 C0 D01 K0 K1 A1 B1 NaN NaN2 K1 K0 A2 B2 C1 D13 K1 K0 A2 B2 C2 D24 K2 K1 A3 B3 NaN NaN'''res = pd.merge(left, right, on=['key1', 'key2'], how='right')print(res) ''' key1 key2 A B C D0 K0 K0 A0 B0 C0 D01 K1 K0 A2 B2 C1 D12 K1 K0 A2 B2 C2 D23 K2 K0 NaN NaN C3 D3'''

3.3 Indicator

indicator=True会将合并的记录放在新的一列。

import pandas as pd #定义资料集并打印出df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a','b']})df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]}) print(df1)# col1 col_left# 0 0 a# 1 1 b print(df2)# col1 col_right# 0 1  2# 1 2  2# 2 2  2 # 依据col1进行合并,并启用indicator=True,最后打印出res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)print(res)# col1 col_left col_right _merge# 0 0.0 a NaN left_only# 1 1.0 b 2.0 both# 2 2.0 NaN 2.0 right_only# 3 2.0 NaN 2.0 right_only # 自定indicator column的名称,并打印出res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')print(res)# col1 col_left col_right indicator_column# 0 0.0 a NaN left_only# 1 1.0 b 2.0  both# 2 2.0 NaN 2.0 right_only# 3 2.0 NaN 2.0 right_only

3.4 依据index合并

import pandas as pd #定义资料集并打印出left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],   'B': ['B0', 'B1', 'B2']},   index=['K0', 'K1', 'K2'])right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],   'D': ['D0', 'D2', 'D3']},   index=['K0', 'K2', 'K3']) print(left)# A B# K0 A0 B0# K1 A1 B1# K2 A2 B2 print(right)# C D# K0 C0 D0# K2 C2 D2# K3 C3 D3 #依据左右资料集的index进行合并,how='outer',并打印出res = pd.merge(left, right, left_index=True, right_index=True, how='outer')print(res)# A B C D# K0 A0 B0 C0 D0# K1 A1 B1 NaN NaN# K2 A2 B2 C2 D2# K3 NaN NaN C3 D3 #依据左右资料集的index进行合并,how='inner',并打印出res = pd.merge(left, right, left_index=True, right_index=True, how='inner')print(res)# A B C D# K0 A0 B0 C0 D0# K2 A2 B2 C2 D2

3.5 解决overlapping的问题

下面脚本中,boys和girls均有属性age,但是两者值不同,因此需要在合并时加上后缀suffixes,以示区分。

import pandas as pd #定义资料集boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]}) #使用suffixes解决overlapping的问题res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')print(res)# age_boy k age_girl# 0 1 K0  4# 1 1 K0  5

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯