zoukankan      html  css  js  c++  java
  • Pandas数据连接

    concat

    s1=pd.Series([0,1],index=['a','b'])
    s2=pd.Series([2,3,4],index=['c','d','e'])
    s3=pd.Series([5,6],index=['f','g'])
    In[4]: pd.concat([s1,s2,s3])#Series行合并
    Out[4]: 
    a    0
    b    1
    c    2
    d    3
    e    4
    f    5
    g    6
    dtype: int64

    说明:直接contact之后,index只是重复,而不是变成我们希望的那样,这样在后续的操作中,容易出现逻辑错误。

    使用result = result.reset_index(drop=True)来改变index就可以了

    s4=pd.Series([0,5,5,6],index=['a','b','f','g'])
    In[6]: pd.concat([s1,s4],axis=1,join='inner')#并集
    Out[6]: 
       0  1
    a  0  0
    b  1  5
    In[7]: pd.concat([s1,s4],axis=1,join_axes=[['a','c','b','e']])#指定索引
    Out[7]: 
         0    1
    a  0.0  0.0
    c  NaN  NaN
    b  1.0  5.0
    e  NaN  NaN
        In[12]: pd.concat({'level1':df1,'level2':df2},axis=1)#字典键做列外索引
        Out[12]: 
          level1     level2     
             one two  three four
        a      0   1    5.0  6.0
        b      2   3    NaN  NaN
        c      4   5    7.0  8.0

    pd.merge()

    import pandas as pd
    
    left = pd.DataFrame({'姓名':['q','w','e'],'年龄':['18','19','20']})
    
    right = pd.DataFrame({'姓名':['q','w','r'],'籍贯':['湖北','北京','上海']})
    
    left
    
        姓名     年龄
    0     q     18
    1     w     19
    2     e     20
    
    right
    
        姓名     籍贯
    0     q     湖北
    1     w     北京
    2     r     上海
    
    # 使用pd.merge()方式进行融合,在默认情况下将重叠列当做键,也可通过参数on指定键
    
    pd.merge(left,right,on='姓名')
    
        姓名     年龄     籍贯
    0     q     18     湖北
    1     w     19     北京
    
    # how默认为交集inner,可以指定为并集outer
    
    pd.merge(left,right,on='姓名',how='outer')
    
        姓名     年龄     籍贯
    0     q     18     湖北
    1     w     19     北京
    2     e     20     NaN
    3     r     NaN     上海
    
    pd.merge(left,right,on='姓名',how='left')
    
        姓名     年龄     籍贯
    0     q     18     湖北
    1     w     19     北京
    2     e     20     NaN
    
    pd.merge(left,right,on='姓名',how='right')
    
        姓名     年龄     籍贯
    0     q     18     湖北
    1     w     19     北京
    2     r     NaN     上海
    
    # 设定indicator参数为True ,则融合结果中将增加列名为"_merge"的一列,其取值代表了不同的含义: 
    
    pd.merge(left,right,on='姓名',how='outer',indicator=True)
    
        姓名     年龄     籍贯     _merge
    0     q     18     湖北     both
    1     w     19     北京     both
    2     e     20     NaN     left_only
    3     r     NaN     上海     right_only
    pd.merge(left,right,on='姓名',how='outer',indicator=True)
    
        姓名     年龄     籍贯     _merge
    0     q     18     湖北     both
    1     w     19     北京     both
    2     e     20     NaN     left_only
    3     r     NaN     上海     right_only
    
    # indicator参数可以接收一个字符串,生成的指标列的列名将由" _merge"变为该字符串:
    
    pd.merge(left,right,on='姓名',how='outer',indicator='融合')
    
        姓名     年龄     籍贯     融合
    0     q     18     湖北     both
    1     w     19     北京     both
    2     e     20     NaN     left_only
    3     r     NaN     上海     right_only
    
    # 不按共同列的融合,融合后共同列名自动增加后缀_x,_y
    
    left = pd.DataFrame({'姓名1':['q','w','e'],'信息':['18','19','20']})
    
    right = pd.DataFrame({'姓名2':['q','w','r'],'信息':['湖北','北京','上海']})
    
    pd.merge(left,right,left_on='姓名1',right_on='姓名2',how='outer')
    
        姓名1     信息_x     姓名2     信息_y
    0     q     18     q     湖北
    1     w     19     w     北京
    2     e     20     NaN     NaN
    3     NaN     NaN     r     上海
    
    # 使用suffixes利用原列名以及后缀组合形成新的列名:
    
    pd.merge(left,right,left_on='姓名1',right_on='姓名2',how='outer',suffixes=('_left','_right'))
    
        姓名1     信息_left     姓名2     信息_right
    0     q     18     q     湖北
    1     w     19     w     北京
    2     e     20     NaN     NaN
    3     NaN     NaN     r     上海
    
    # 创建left的索引为键, right的键为姓名的两个DataFrame :
    
    left = pd.DataFrame({'年龄':['18','19','20']},index=['q','w','e'])
    
    left.index.name='姓名'
    
    right = pd.DataFrame({'姓名':['q','w','r'],'籍贯':['湖北','北京','上海']})
    
    left
    
        年龄
    姓名     
    q     18
    w     19
    e     20
    
    right
    
        姓名     籍贯
    0     q     湖北
    1     w     北京
    2     r     上海
    
    pd.merge(left,right,left_index=True,right_on='姓名',how='outer') # 或者使用join:left.join(right,on='姓名',how='outer')
    
        年龄     姓名     籍贯
    0     18     q     湖北
    1     19     w     北京
    2     20     e     NaN
    2     NaN     r     上海
    
    # 创建left和right的索引都为键的两个DataFrame :
    
    left = pd.DataFrame({'年龄':['18','19','20']},index=['q','w','e'])
    
    left.index.name='姓名'
    
    right = pd.DataFrame({'籍贯':['湖北','北京','上海']},index=['q','w','r'])
    
    right.index.name='姓名'
    
    # 使用pd.merge()
    
    pd.merge(left,right,left_index=True,right_index=True,how='outer')
    
        年龄     籍贯
    姓名         
    e     20     NaN
    q     18     湖北
    r     NaN     上海
    w     19     北京
    
    # 使用join
    
    left.join(right,how='outer')
    
        年龄     籍贯
    姓名         
    e     20     NaN
    q     18     湖北
    r     NaN     上海
    w     19     北京
    
    # DataFrame.combine_ first实例方法实现了用参数对象中的数据为调用者对象的缺失数据"打补丁”,并
  • 相关阅读:
    LeetCode 225 Implement Stack using Queues 用队列实现栈
    LeetCode 232 Implement Queue using Stacks 两个栈实现队列
    LeetCode 583 Delete Operation for Two Strings 删除两个字符串的不同部分使两个字符串相同,求删除的步数
    LeetCode 230 Kth Smallest Element in a BST 二叉搜索树中的第K个元素
    LeetCode 236 Lowest Common Ancestor of a Binary Tree 二叉树两个子节点的最低公共父节点
    LeetCode 148 Sort List 链表上的归并排序和快速排序
    LeetCode 069 Sqrt(x) 求平方根
    webpack新版本4.12应用九(配置文件之模块(module))
    webpack新版本4.12应用九(配置文件之输出(output))
    webpack新版本4.12应用九(配置文件之入口和上下文(entry and context))
  • 原文地址:https://www.cnblogs.com/celine227/p/14132233.html
Copyright © 2011-2022 走看看