131、pandas操作——轴向连接
2018-01-24 本文已影响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
1.png
pd.isnull用法:对整体的series或Dataframe判断是否为空:
2.png
Series有一个combine_first方法实现合并重叠数据,并且进行数据对齐:
3.png
对于DataFrame对象,combine_first同样适用:
4.png













合并重叠数据
使用NumPy的where函数实现合并重叠数据:



源码:
# 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)