美文网首页我爱编程
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