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实例方法实现了用参数对象中的数据为调用者对象的缺失数据"打补丁”,并