美文网首页我爱编程
131、pandas操作——轴向连接

131、pandas操作——轴向连接

作者: 陈容喜 | 来源:发表于2018-01-24 23:17 被阅读0次
    NumPy有一个用于合并原始NumPy数组的concatenation函数: 1.png pandas的concat函数可以将值和索引粘合在一起: 2.png 默认情况下,concat是在axis=0上工作,最终产生一个新的Series。如果传入axis=1,则结果就会变成一个DataFrame(axis=1是列): 3.png 传入join='inner'即可得到它们的交集: 4.png 通过join_axex指定要在其他轴上使用的索引: 5.png 如果要在连接轴上创建一个层次化索引需要使用keys参数: 6.png 如果沿着axis=1对Series进行合并, 则keys会成为DataFrame的列头: 7.png 沿着axis=1对DataFrame对象进行合并, 则keys也会成为列头: 8.png 如果传入的不是列表而是一个字典,则字典的键就会被当做keys选项的值: 9.png 使用names参数管理层次化索引: 10.png 分析无意义的DataFrame行索引: 11.png 传入ignore_index=True处理无意义的行索引: 12.png concat函数的参数: 13.png

    合并重叠数据

    使用NumPy的where函数实现合并重叠数据: 1.png pd.isnull用法:对整体的series或Dataframe判断是否为空: 2.png Series有一个combine_first方法实现合并重叠数据,并且进行数据对齐: 3.png 对于DataFrame对象,combine_first同样适用: 4.png

    源码:

    # coding: utf-8
    
    # In[1]:
    
    import numpy as np
    from pandas import Series,DataFrame
    import pandas as pd
    
    
    # In[2]:
    
    arr = np.arange(12).reshape(3,4)
    print(arr)
    
    
    # In[3]:
    
    # concatenation函数用于合并数组
    np.concatenate([arr,arr],axis=1)
    
    
    # In[4]:
    
    # 调用pandas的concat函数将值和索引粘合在一起
    s1 = Series([0,1],index=['a','b'])
    s2 = Series([2,3,4],index=['c','d','e'])
    s3 = Series([5,6],index=['f','g'])
    
    pd.concat([s1,s2,s3])
    
    
    # In[5]:
    
    '''
    默认下concat在axis=0上工作,如果传入axis=1(表示列),
    则结果变成一个DataFrame对象
    '''
    pd.concat([s1,s2,s3],axis=1)
    
    
    # In[6]:
    
    s4 = pd.concat([s1 * 5,s3])
    print(s4)
    
    
    # In[7]:
    
    pd.concat([s1,s4],axis=1)
    
    
    # In[8]:
    
    # 传入join='inner'可以得到交集
    pd.concat([s1,s4],axis=1,join='inner')
    
    
    # In[9]:
    
    # 通过join_axex指定要在其他轴上使用的索引
    pd.concat([s1,s4],axis=1,join_axes=[['a','c','b','e']])
    
    
    # In[10]:
    
    # 使用keys参数创建层次化索引
    result = pd.concat([s1,s2,s3],keys=['one','two','three'])
    print(result)
    
    
    # In[11]:
    
    # 如果沿着axis=1对Series进行合并, 则keys会成为DataFrame的列头
    pd.concat([s1,s2,s3],axis=1,keys=['one','two','three'])
    
    
    # In[12]:
    
    # 沿着axis=1对DataFrame对象进行合并, 则keys会成为列头
    df1 = DataFrame(np.arange(6).reshape(3,2),index=['a','b','c'],columns=['one','two'])
    df2 = DataFrame(5 + np.arange(4).reshape(2,2),index=['a','c'],columns=['three','four'])
    pd.concat([df1,df2],axis=1,keys=['level1','level2'])
    
    
    # In[13]:
    
    # 如果传入字典,则字典的键被当做keys选项的值
    pd.concat({'level1':df1,'level2':df2},axis=1)
    
    
    # In[14]:
    
    # names参数管理层次化索引
    pd.concat([df1,df2],axis=1,keys=['level1','level2'],names=['upper','lower'])
    
    
    # In[15]:
    
    # 分析无意义的DataFrame行索引
    df1 = DataFrame(np.random.randn(3,4),columns=['a','b','c','d'])
    print(df1)
    
    
    # In[16]:
    
    df2 = DataFrame(np.random.randn(2,3),columns=['b','d','a'])
    print(df2)
    
    
    # In[17]:
    
    pd.concat([df1,df2])
    
    
    # In[18]:
    
    # 传入ignore_index=True处理无意义的行索引
    pd.concat([df1,df2],ignore_index=True)
    
    # ### 合并重叠数据 ###
    
    # In[19]:
    
    a = Series([np.nan,2.5,np.nan,3.5,4.5,np.nan],
               index=['f','e','d','c','b','a'])
    print(a)
    
    
    # In[20]:
    
    b = Series(np.arange(len(a),dtype=np.float64),
               index=['f','e','d','c','b','a'])
    b[-1] = np.nan
    print(b)
    
    
    # In[21]:
    
    # 使用NumPy的where函数合并重叠数据
    c = Series(np.where(pd.isnull(a),b,a),
               index=['f','e','d','c','b','a'])
    print(c)
    
    
    # ### pd.isnull用法:对整体的series或Dataframe判断是否为空
    
    # In[22]:
    
    inl = Series([np.nan,np.nan])
    pd.isnull(inl)
    
    
    # In[23]:
    
    re = np.where(pd.isnull(inl))
    print(re)
    
    
    # In[24]:
    
    # Series有一个combine_first方法
    b[:-2].combine_first(a[2:])
    
    
    # In[25]:
    
    # DataFrame中combine_first用法
    df1 = DataFrame({'a':[1,np.nan,5,np.nan],
                     'b':[np.nan,2,np.nan,6],
                     'c':range(2,18,4)})
    print(df1)
    
    
    # In[26]:
    
    df2 = DataFrame({'a':[5,4,np.nan,3,7],
                     'b':[np.nan,3,4,6,8]})
    print(df2)
    
    
    # In[27]:
    
    df1.combine_first(df2)
    

    相关文章

      网友评论

        本文标题:131、pandas操作——轴向连接

        本文链接:https://www.haomeiwen.com/subject/mjmyaxtx.html