精华内容
下载资源
问答
  • 今天小编就为大家分享一篇pandas表连接 索引上的合并方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 连接对象(Concatenating)pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)join有两个参数inner(内连)

    连接对象(Concatenating)

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

    join有两个参数inner(内连)和outer(外连)
    ignore_index:是否忽略索引,默认不忽略,此时会按照索引连接。
    join_axes:使用哪个数据框的索引
    keys:复合索引

    横向连接

    In [1]: 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])
       ...: 
    In [8]: df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
       ...:                  'D': ['D2', 'D3', 'D6', 'D7'],
       ...:                  'F': ['F2', 'F3', 'F6', 'F7']},
       ...:                 index=[2, 3, 6, 7])
       ...: 
    result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])

    这里写图片描述

    纵向连接

    In [15]: result = pd.concat([df1, df4], ignore_index=True)
    这里写图片描述

    append函数更加有效率

    数据库形式的连接(joining/merging)

    这个语法是专门为那些使用SQL数据的人群设置的

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

    left:左数据表
    right:右数据表
    on:以哪一列为标准做联表,如果没有输入参数,则会以共有的索引作为依据
    left_on:以左边的数据框作为join key
    right_on:以右边的数据框作为join key
    left_index:以左边的索引作为join key
    right_index:以右边的索引作为join key
    how:left right out inner,默认为inner
    sort:通过join key对结果进行排序
    suffixes:
    copy:
    indicator:

    merge同时也是一个对象方法,对象默认是左联表。而join实例方法则是默认以索引做为连接方法。

    In [38]: left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
       ....:                      'A': ['A0', 'A1', 'A2', 'A3'],
       ....:                      'B': ['B0', 'B1', 'B2', 'B3']})
       ....: 
    
    In [39]: right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
       ....:                       'C': ['C0', 'C1', 'C2', 'C3'],
       ....:                       'D': ['D0', 'D1', 'D2', 'D3']})
       ....: 
    
    In [40]: result = pd.merge(left, right, on='key')

    这里写图片描述
    使用indicator可以监视连接的状态

    In [48]: df1 = pd.DataFrame({'col1': [0, 1], 'col_left':['a', 'b']})
    
    In [49]: df2 = pd.DataFrame({'col1': [1, 2, 2],'col_right':[2, 2, 2]})
    
    In [50]: pd.merge(df1, df2, on='col1', how='outer', indicator=True)
    Out[50]: 
       col1 col_left  col_right      _merge
    0     0        a        NaN   left_only
    1     1        b        2.0        both
    2     2      NaN        2.0  right_only
    3     2      NaN        2.0  right_only
    展开全文
  • Pandas--表连接的几种方式

    千次阅读 2020-07-18 21:32:18
    import pandas as pd raw_data_1 = { 'subject_id': ['1', '2', '3', '4', '5'], 'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', '...
    import pandas as pd
    
    raw_data_1 = {
            'subject_id': ['1', '2', '3', '4', '5'],
            'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 
            'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}
    
    raw_data_2 = {
            'subject_id': ['4', '5', '6', '7', '8'],
            'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 
            'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']}
    
    raw_data_3 = {
            'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
            'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}
    
    df1 = pd.DataFrame(raw_data_1, columns = ['subject_id', 'first_name', 'last_name'])
    df2 = pd.DataFrame(raw_data_2, columns = ['subject_id', 'first_name', 'last_name'])
    df3 = pd.DataFrame(raw_data_3, columns = ['subject_id','test_id'])
    
    df1
    
    subject_idfirst_namelast_name
    01AlexAnderson
    12AmyAckerman
    23AllenAli
    34AliceAoni
    45AyoungAtiches
    df2
    
    subject_idfirst_namelast_name
    04BillyBonder
    15BrianBlack
    26BranBalwner
    37BryceBrice
    48BettyBtisan
    df3
    
    subject_idtest_id
    0151
    1215
    2315
    3461
    4516
    5714
    6815
    791
    81061
    91116

    append

    在这里插入图片描述

    # ignore_index=True 充值索引
    df1.append(df2, ignore_index=True)
    
    subject_idfirst_namelast_name
    01AlexAnderson
    12AmyAckerman
    23AllenAli
    34AliceAoni
    45AyoungAtiches
    54BillyBonder
    65BrianBlack
    76BranBalwner
    87BryceBrice
    98BettyBtisan
    # # verify_intergrity=True 若存在重复索引则报错
    # df1.append(df2, verify_integrity=True)
    
    # 数据框维度不同时
    df1.append(df3)
    
    subject_idfirst_namelast_nametest_id
    01AlexAndersonNaN
    12AmyAckermanNaN
    23AllenAliNaN
    34AliceAoniNaN
    45AyoungAtichesNaN
    01NaNNaN51.0
    12NaNNaN15.0
    23NaNNaN15.0
    34NaNNaN61.0
    45NaNNaN16.0
    57NaNNaN14.0
    68NaNNaN15.0
    79NaNNaN1.0
    810NaNNaN61.0
    911NaNNaN16.0

    join

    在这里插入图片描述

    df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],
                       'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
    df
    
    keyA
    0K0A0
    1K1A1
    2K2A2
    3K3A3
    4K4A4
    5K5A5
    other = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
                          'B': ['B0', 'B1', 'B2']})
    other
    
    keyB
    0K0B0
    1K1B1
    2K2B2
    # 默认按照index左连接
    # 当表中有重复列且不被作为连接依据时需要指定后缀
    df.join(other, lsuffix='_caller', rsuffix='_other')
    
    key_callerAkey_otherB
    0K0A0K0B0
    1K1A1K1B1
    2K2A2K2B2
    3K3A3NaNNaN
    4K4A4NaNNaN
    5K5A5NaNNaN
    df.join(other.set_index('key'), on='key')
    
    keyAB
    0K0A0B0
    1K1A1B1
    2K2A2B2
    3K3A3NaN
    4K4A4NaN
    5K5A5NaN
    df.set_index('key').join(other.set_index('key'))
    
    AB
    key
    K0A0B0
    K1A1B1
    K2A2B2
    K3A3NaN
    K4A4NaN
    K5A5NaN

    pandas.DataFrame.merge

    # 默认内连接
    df1.merge(df2, on='subject_id')
    
    subject_idfirst_name_xlast_name_xfirst_name_ylast_name_y
    04AliceAoniBillyBonder
    15AyoungAtichesBrianBlack
    df2.subject_id = df2['subject_id'].astype(int)
    
    # 指定连接基准为:左表的index,右表的subject_id列
    df1.merge(df2, left_index=True, right_on='subject_id')
    
    subject_idsubject_id_xfirst_name_xlast_name_xsubject_id_yfirst_name_ylast_name_y
    045AyoungAtiches4BillyBonder

    pd.concat

    在这里插入图片描述

    pd.concat([df1,df2])
    
    subject_idfirst_namelast_name
    01AlexAnderson
    12AmyAckerman
    23AllenAli
    34AliceAoni
    45AyoungAtiches
    04BillyBonder
    15BrianBlack
    26BranBalwner
    37BryceBrice
    48BettyBtisan
    pd.concat([df1,df3])
    
    subject_idfirst_namelast_nametest_id
    01AlexAndersonNaN
    12AmyAckermanNaN
    23AllenAliNaN
    34AliceAoniNaN
    45AyoungAtichesNaN
    01NaNNaN51.0
    12NaNNaN15.0
    23NaNNaN15.0
    34NaNNaN61.0
    45NaNNaN16.0
    57NaNNaN14.0
    68NaNNaN15.0
    79NaNNaN1.0
    810NaNNaN61.0
    911NaNNaN16.0
    pd.concat([df1,df3], axis=1, join='inner')
    
    subject_idfirst_namelast_namesubject_idtest_id
    01AlexAnderson151
    12AmyAckerman215
    23AllenAli315
    34AliceAoni461
    45AyoungAtiches516
    
    
    展开全文
  • pandas表连接 索引上的合并

    千次阅读 2017-10-15 22:23:22
    以上代码如果想改为外部连接 how = ‘outer’ 就可以了 同时合并双方索引 left2 = pd.DataFrame([[1,2],[3,4],[5,6]],index=[‘a’,’c’,’e’],columns=[‘Ohio’,’Neveda’]) right2 = pd....

    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(left1)
    print(right1)
    result = pd.merge(left1,right1,left_on=’key’,right_index=True)
    print(result)

    层次化数据的索引

    lefth = pd.DataFrame({‘key1’:[‘Ohio’,’Ohio’,’Ohio’,’Nevada’,’Nevada’],
    ‘key2’:[2000,2001,2002,2001,2002],
    ‘data’:np.arange(5)})
    print(lefth)
    righth = pd.DataFrame(np.arange(12).reshape(6,2),index = [[‘Nevada’,’Nevada’,’Ohio’,’Ohio’,’Ohio’,’Ohio’],
    [2001,2000,2000,200,2001,2002]])
    print(righth)
    result = pd.merge(lefth,righth,left_on=[‘key1’,’key2’],right_index=True)
    print(result)

    以上代码如果想改为外部连接 how = ‘outer’ 就可以了

    同时合并双方索引

    left2 = pd.DataFrame([[1,2],[3,4],[5,6]],index=[‘a’,’c’,’e’],columns=[‘Ohio’,’Neveda’])
    right2 = pd.DataFrame([[7,8],[9,10],[11,12],[13,14]],index=[‘b’,’c’,’d’,’e’],columns=[‘Missouri’,’Alabma’])
    print(left2)
    print(right2)
    result = pd.merge(left2,right2,how=’outer’,left_index=True,right_index=True)
    print(result)

    展开全文
  • pandas连接操作

    千次阅读 2019-02-27 18:25:07
    在分析数据时,遇到了要处理多个dataframe按照关键词user_id连接的需求,在sql中只要多个left join on 就可以了,那么在pandas中怎么操作呢? DataFrame中的表连接方式 dataframe主要有三个函数可以用来做连接...

    问题

    在分析数据时,遇到了要处理多个dataframe按照关键词user_id连接的需求,在sql中只要多个表left join on 就可以了,那么在pandas中怎么操作呢?

    DataFrame中的表连接方式

    dataframe主要有三个函数可以用来做表的连接,分别是join、merge、concat,下面分别介绍这三个DataFrame的用法。

    join

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

    通过列或者索引join “other” dataframe, 能高效的连接多个dataframe。

    参数:

    • other:一个dataframe,或者是dataframe的list
    • on:列或索引名,或者是连接关键词的list
    • how:连接方式,可选{‘left’,‘right’, ‘outer’, ‘inner’}, 默认值: ‘left’
    • lsuffix:左表交叉列的别名
    • rsuffix:右表交叉列的别名
    • sort:布尔值,是否按照连接关键词排序,默认为False

    注意:多表连接只能通过索引,否则会报错

    
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-35-29a230cbe380> in <module>
    ----> 1 oned_beh_UserCou.join([threed_beh_UserCou.reset_index(),sixd_beh_UserCou.reset_index],how='left',on='user_id')
    
    /usr/local/lib/python3.5/dist-packages/pandas/core/frame.py in join(self, other, on, how, lsuffix, rsuffix, sort)
       5291         # For SparseDataFrame's benefit
       5292         return self._join_compat(other, on=on, how=how, lsuffix=lsuffix,
    -> 5293                                  rsuffix=rsuffix, sort=sort)
       5294 
       5295     def _join_compat(self, other, on=None, how='left', lsuffix='', rsuffix='',
    
    /usr/local/lib/python3.5/dist-packages/pandas/core/frame.py in _join_compat(self, other, on, how, lsuffix, rsuffix, sort)
       5309         else:
       5310             if on is not None:
    -> 5311                 raise ValueError('Joining multiple DataFrames only supported'
       5312                                  ' for joining on index')
       5313 
    
    ValueError: Joining multiple DataFrames only supported for joining on index
    

    但是当对dataframe进行groupby、reset_index等操作后,此时的index可能并不是我们想要的索引列。可以通过以下函数来重置index:

    pandas.DataFrame.reset_index()
    pandas.DataFrame.set_index("",drop=True)
    pandas.Series.reset_index()
    

    merge

    DataFrame.merge(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, validate=None)[source]
    

    merge类似于数据库中的join操作(database-style join),如果两表连接的字段是column,dataframe的index会被省略,如果是索引和索引或者索引和column的链接,最后仍会保留index

    参数

    • right:连接的另一个dataframe
    • how: 连接方式,可选{‘left’,‘right’, ‘outer’, ‘inner’}, 默认值: ‘inner’
    • on: 表的连接字段,column name 或者index name,这个字段必须出现在连接的两个dataframe中,如果该参数值为None,并且不是按照index连接,则表的连接字段为两个dataframe的公共字段
    • left_on: 左dataframe的连接column或index名,list或者array-like
    • right_on: 右dataframe的连接column或index名,list或者array-like
    • left_index: 布尔值,默认为False,使用左dataframe的index作为join的字段
    • right_index: 同left_index
    • sort: 布尔值,默认False,是否按键值排序
    • suffixes: 2-length sequence,公共字段别名
    • copy: 布尔值,默认True
    • indicator: 布尔或者字符串
    • validate: 字符串,默认None,检验merge是否为以下形式:“one_to_one”,“one_to_many”,“many_to_one”,“many_to_many”

    concat

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

    按某一维度拼接pandas对象

    参数:

    • objs:
    • axis: {0,1},默认为0
    • join: {‘inner’,‘outer’},默认为outer,这个参数的意思是如果按行连接,列的处理方式,inner则只保留公共列,outer则列出所有列
    • join_axes:
    • ignore_index: 布尔值,默认为False,
    • key: sequence,默认None
    import pandas as pd
    df1 = pd.DataFrame([['a', 1], ['b', 2]],columns=['letter', 'number'])
    df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']], columns=['letter', 'number', 'animal'])
    pd.concat([df1, df3], join="inner")
    
    letter	number
    0	a	1
    1	b	2
    0	c	3
    1	d	4
    
    pd.concat([df1, df3], join="outer",ignore_index=True)
    animal	letter	number
    
    0	NaN	a	1
    1	NaN	b	2
    2	cat	c	3
    3	dog	d	4
    

    总结

    merge与join相比,join可以一次进行多个dataframe的连接,而merge一次只能进行两个dataframe, 但merge在连接字段的设置上更灵活,而concat只是进行dataframe的行或列的拼接。

    展开全文
  • 数据分析笔记--pandas的多表连接

    万次阅读 2018-06-05 11:24:12
    import pandas as pdimport numpy as np定义两个DataFrame数据集使用merge进行多表连接1.默认连接方式(会使用之间相同的列名作为外键进行连接,如果有两边对不上的字段则会自动丢弃)2.通过on指定外键on指定外键...
  • pandas——Merge做之间的连接

    千次阅读 2019-01-12 12:16:06
    基于某个column或某些columns做连接 连接时有4种方法how = [‘left’, ‘right’, ‘outer’, ‘inner’],默认值how=‘inner’ how=‘inner’ 默认值,内连接(sql中的自然连接)。按参数on的值交,其实就是键的...
  • # pandas DataFrame 连接表 df3 = pd.merge(df1, df2, left_index=True, right_index=True, how='inner') #df3 = df1.join(df2, how='inner') print(df3.head()) df3.index = pd.to_datetime(df3.index) # 画基金...
  • pandas初学前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习...
  • 可以通过多种方式将Pandas对象联合到一起 pandas.merge: 根据一个或多个键进行连接。类似SQL的连接操作 pandas.concat:使对象在...Pandas.DataFrame操作表连接有三种方式:merge, join, concat。下面就来说一说这...
  • pandas连接数据库 import pymysql from sqlalchemy import create_engine sql = 'select * from data' conn = create_engine('mysql+pymysql://root:159951@127.0.0.1:3306/test') pdata = pd.read_sql(sql,conn) ...
  • 入门pandas连接查询

    2021-01-28 22:17:28
    import pandas as pd 数据1= pd.DataFrame({'姓名':['叶问','李小龙','孙兴华','李小龙','叶问','叶问'],'出手次数1':np.arange(6)}) 数据2 = pd.DataFrame({'姓名':['黄飞鸿','孙兴华','李小龙'],'出手次数2':[1,2,...
  • 主要介绍了pandas连接函数concat()函数的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Python之Pandas连接详解

    2021-03-24 15:49:38
    把两张相关的按照某一个或某一组键连接起来是一种常见操作,例如学生期末考试各个科目的成绩按照姓名和班级连接成总的成绩,又例如对企业员工的各类信息按照员工ID号进行连接汇总。由此可以看出,在关系型...
  • pandas连接

    千次阅读 2018-07-13 16:37:01
    dd = pd.merge(df,df2,how='outer')外连接是两个表连接的一种方式,给人的印象是外连接的话,连接后的会变大。 he 122 0 1 2 1 2 3上面是1,下面是2 he 1222 0 1 1 1 1 2 2 1 2 3 2 2 4 2 2 5 2 2这两个有.....
  • Pandas连接

    2020-12-29 19:42:26
    美国疫情数据集 现有美国4月12日至11月16日的疫情报表,请将New York的Confirmed, Deaths, Recovered, Active合并为一张,索引为按如下方法生成的日期字符串序列: ...假设连接的两无公共列 调用方式为 join(df1, d
  • import pandas as pd def go(path1, path2, new_file_name): df1 = pd.read_csv(path1, encoding="utf-8") df2 = pd.read_csv(path2, encoding="utf-8") columns = df1.columns df_obj = pd.concat([df1,df2], ...
  • 右侧表连接索引 sort:对结果进行排序 suffixes:对于两个都有重复列,自动添加’_x’, '_y’后缀 indicator:在结果中增加一列,用于显示数据来自哪个中 创建DataFrame import pandas as pd df1 = pd....
  • pandas 操作记录

    2021-09-23 14:16:25
    先转为category类型,再按该列排序 o_list = ['a', 'c', 'b'] bf_data['继承3'] = bf_data['继承3'].astype('category') bf_data['继承3'].cat.set_categories(o_list, inplace=True) bf_data.sort_values('继承3', ...
  • pandas concat表连接

    千次阅读 2017-08-31 11:36:47
    concat函数是在pandas底下的方法,可以将数据根据不同的轴作简单的融合 12 pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=...
  • 目录 1、前言 2、windows系统python(pycharm)...3.1、Pandas连接Oracle并使用sql语句查询数据 3.2、使用Pandas连接Oracle并插入数据 1、前言 pandas不仅限于读取本地的离线文件,也可以在线读取数据库的数据...
  • pandas的pd.concat()函数与np.concatenate()语法类似,当时配置参数更多,功能也更强大: pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,525
精华内容 12,210
关键字:

pandas表连接