網站首頁 編程語言 正文
merage
pandas提供了一個類似于關系數據庫的連接(join)操作的方法merage,可以根據一個或多個鍵將不同DataFrame中的行連接起來,語法如下:
merge(left, right, how=‘inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', ‘_y'), copy=True, indicator=False)
作為一個功能完善、強大的語言,python的pandas庫中的merge()支持各種內外連接。
- left與right:兩個不同的DataFrame
- how:指的是合并(連接)的方式有inner(內連接),left(左外連接),right(右外連接),outer(全外連接);默認為inner
- on : 指的是用于連接的列索引名稱。必須存在右右兩個DataFrame對象中,如果沒有指定且其他參數也未指定則以兩個DataFrame的列名交集做為連接鍵
- left_on:左則DataFrame中用作連接鍵的列名;這個參數中左右列名不相同,但代表的含義相同時非常有用。
- right_on:右則DataFrame中用作 連接鍵的列名
- left_index:使用左則DataFrame中的行索引做為連接鍵
- right_index:使用右則DataFrame中的行索引做為連接鍵
- sort:默認為True,將合并的數據進行排序。在大多數情況下設置為False可以提高性能
- suffixes:字符串值組成的元組,用于指定當左右DataFrame存在相同列名時在列名后面附加的后綴名稱,默認為(’_x’,’_y’)
- copy:默認為True,總是將數據復制到數據結構中;大多數情況下設置為False可以提高性能
- indicator:在 0.17.0中還增加了一個顯示合并數據中來源情況;如只來自己于左邊(left_only)、兩者(both)
#coding=utf-8
import pandas as pd
import numpy as np
class PanMerge():
def PanMer(self):
data = pd.DataFrame([{"id": 0, "name": 'lxh', "age": 20, "cp": 'lm'}, {"id": 1, "name": 'xiao', "age": 40, "cp": 'ly'},{"id": 2, "name": 'hua', "age": 4, "cp": 'yry'}, {"id": 3, "name": 'be', "age": 70, "cp": 'old'}])
data1 = pd.DataFrame([{"id": 100, "name": 'lxh', 'cs': 10}, {"id": 101, "name": 'xiao', 'cs': 40},{"id": 102, "name": 'hua2', 'cs': 50}])
data2 = pd.DataFrame([{"id": 0, "name": 'lxh', 'cs': 10}, {"id": 101, "name": 'xiao', 'cs': 40},{"id": 102, "name": 'hua2', 'cs': 50}])
data3 = pd.DataFrame([{"mid": 0, "mname": 'lxh', 'cs': 10}, {"mid": 101, "mname": 'xiao', 'cs': 40},{"mid": 102, "mname": 'hua2', 'cs': 50}])
# print(data)
# print(data1)
# print(data2)
df1 = pd.merge(data,data1,on="name",how="left",suffixes=('_a','_b'))#相同的其他類名用_a和_b標注
df2 = pd.merge(data, data2, on=("name", "id")) #多列名做為內鏈接的連接鍵
df3 = pd.merge(data, data2) #不指定on則以兩個DataFrame的列名交集做為連接鍵
# 使用右邊的DataFrame的行索引做為連接鍵
indexed_data1 = data1.set_index("name")##設置行索引名稱
# print(indexed_data1)
df5 = pd. merge(data, indexed_data1, left_on='name', right_index=True) #"使用右邊的DataFrame的行索引做為連接鍵\r\n"
print(df5)
print('左外連接\r\n',pd.merge(data,data1,on="name",how="left",suffixes=('_a','_b')))
print('左外連接1\r\n',pd.merge(data1,data,on="name",how="left"))
print ('右外連接\r\n',pd.merge(data,data1,on="name",how="right"))
# 當左右兩個DataFrame的列名不同,當又想做為連接鍵時可以使用left_on與right_on來指定連接鍵
df6=pd.merge(data,data3,left_on=["name","id"],right_on=["mname","mid"])
print(df6)
join方法提供了一個簡便的方法用于將兩個DataFrame中的不同的列索引合并成為一個DataFrame。
其中參數的意義與merge方法基本相同, 只是join方法默認為左外連接how = left。
dj1=pd.DataFrame([{"id":0,"name":'lxh',"age":20,"cp":'lm'},{"id":1,"name":'xiao',"age":40,"cp":'ly'},{"id":2,"name":'hua',"age":4,"cp":'yry'},{"id":3,"name":'be',"age":70,"cp":'old'}],index=['a','b','c','d'])
dj2=pd.DataFrame([{"sex":0},{"sex":1},{"sex":2}],index=['a','b','e'])
print(dj1)
print(dj2)
df7= dj1.join(dj2)
print(df7)
print('使用右連接\r\n', dj1.join(dj2, how="right") ) # 這里出自動屏蔽了data1中沒有index=c,d的那行數據;等價于data1.join(data)
print('使用內連接\r\n', dj1.join(dj2, how='inner'))
print('使用全外連接\r\n', dj1.join(dj2, how='outer'))
還有一種連接方式:concat
concat方法相當于數據庫中的全連接(UNION ALL),可以指定按某個軸進行連接,也可以指定連接的方式join(outer,inner 只有這兩種)。
與數據庫不同的是concat不會去重,要達到去重的效果可以使用drop_duplicates方法
dc1 = pd.DataFrame({'city': ['Chicago', 'San Francisco', 'New York City'], 'rank': range(1, 4)})
dc2 = pd.DataFrame({'city': ['Chicago', 'Boston', 'Los Angeles'], 'rank': [1, 4, 5]})
print(dc1)
print(dc2)
# print('按軸進行內連接\r\n', pd.concat([dc1, dc2], join="inner", axis=0))
dc3=pd.concat([dc1,dc2],join="inner", axis=0) #axis=1橫向操作,axis=0縱向操作
print(dc3)
dc4=pd.concat([dc1,dc2],keys=['a','b']) #進行外連接并指定keys(行索引) 用a,b 進行標識
print(dc4)
dc5 = pd.concat([dc1,dc2],ignore_index=True).drop_duplicates() #完全一樣時候,去重數據
print(dc5)
if __name__ == '__main__':
PanMerge().PanMer()
原文鏈接:https://blog.csdn.net/weixin_46576686/article/details/117962707
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2023-07-08 keycloak更新token調用updateToken函數無效,解決辦法
- 2022-08-28 centos 單機版redis安裝與數據持久化
- 2023-09-12 利用ImportBeanDefinitionRegistrar手動向Spring容器注入Bean
- 2022-07-19 springboot繼承swagger3
- 2022-01-10 解決遮罩下方元素禁止滾動
- 2022-06-28 ES6基礎語法之數組拓展_基礎知識
- 2022-12-05 C++?Boost?Heap使用實例詳解_C 語言
- 2022-07-22 CSS3過渡與動畫
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支