Pandas資料連線
阿新 • • 發佈:2020-12-14
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例項方法實現了用引數物件中的資料為呼叫者物件的缺失資料"打補丁”,並