本篇的文章主要講述了dataframe中merge函式的使用方式,如果學過sql語法的讀者可能對其上手會非常快,否則需要好好研究一會,知識追尋者相信,能看到這篇文章的都是已經學過sql的讀者,要不然你怎麼會懂pyhton,任何一門計算機語言學到深處基本都離不開sql操作,技巧就是你要會sql表聯結;
dataframe1
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data1 =
index1 =
['user1'
,'user2'
,'user3'
]frame1 = pd.dataframe(data1,index1)
print
(frame1)
輸出
user price hobby
user1 zszxz 100 reading
user2 craler 200 running
user3 rose 300 hiking
dataframe2
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
data2 =
index2 =
['user1'
,'user2'
,'user3'
]frame2 = pd.dataframe(data2,index2)
print
(frame2)
輸出
user price activity
user1 zszxz 100 hiking
user2 craler 2000 riding
user3 rose 3000 climbing
會預設採取擁有共同得列進行合併,不可描述得是不知道以哪個列為基準;這個合併類似sql語句中得表連線 比如 on 後面2個主鍵相等得條件,sql中得鍵就是dataframe合併中的基準列。一般情況下不推薦使用預設合併,應指明合併的基準列;
# 兩個物件具有相同列合併
frame = pd.merge(frame1,frame2)
print
(frame)
輸出
user price hobby activity
0 zszxz 100 reading hiking
指明合併的基準列,用引數on
進行指定;下列示例中以user列為基準進行聯結。可以看出,如果有相同的列,會分左右,分別用x,y以作區分;敲黑板畫重點了:在合併時以基準列列鍵,相同行則合併為一行,否則保留;
# 以 user為標準合併
frame = pd.merge(frame1,frame2,on=
'user'
)print
(frame)
輸出
user price_x hobby price_y activity
0 zszxz 100 reading 100 hiking
1 craler 200 running 2000 riding
2 rose 300 hiking 3000 climbing
當左右dataframe的列不一致的時候,就需要分別指定基準列;使用left_on
指定左鍵,使用right_on
指定右鍵;
#
frame = pd.merge(frame1,frame2,left_on=
'hobby'
,right_on=
'activity'
)print
(frame)
輸出
user_x price_x hobby user_y price_y activity
0 rose 300 hiking zszxz 100 hiking
使用how
可以指定聯結方式;如果不指定預設為inner;outer相當於左右聯結之和;
# 以 user為標準合併
frame = pd.merge(frame1,frame2,on=
'user'
, how=
'outer'
)print
(frame)
輸出
user price_x hobby price_y activity
0 zszxz 100 reading 100 hiking
1 craler 200 running 2000 riding
2 rose 300 hiking 3000 climbing
會顯示出左邊所有dataframe的列;
frame = pd.merge(frame1,frame2,on=
'user'
, how=
'left'
)print
(frame)
輸出
user price_x hobby price_y activity
0 zszxz 100 reading 100 hiking
1 craler 200 running 2000 riding
2 rose 300 hiking 3000 climbing
會顯示出右邊所有dataframe的列;
frame = pd.merge(frame1,frame2,on=
'user'
, how=
'right'
)print
(frame)
輸出
user price_x hobby price_y activity
0 zszxz 100 reading 100 hiking
1 craler 200 running 2000 riding
2 rose 300 hiking 3000 climbing
指定多列使用陣列;將會以 user, price兩列為基準,其中這兩列行的值相對應完全相同時兩個dataframe才進行合併為一行;
frame = pd.merge(frame1,frame2,on=
['user'
,'price'
], how=
'outer'
)print
(frame)
輸出
user price hobby activity
0 zszxz 100 reading hiking
1 craler 200 running nan
2 rose 300 hiking nan
3 craler 2000 nan riding
4 rose 3000 nan climbing
將left_index
,right_index
都設定為true時,將以index為基準合併;
frame = pd.merge(frame1,frame2,left_index=
true
,right_index=
true
)print
(frame)
輸出
user_x price_x hobby user_y price_y activity
user1 zszxz 100 reading zszxz 100 hiking
user2 craler 200 running craler 2000 riding
user3 rose 300 hiking rose 3000 climbing
學習 C 到底有什麼好處?
知乎 學c 本身是教不會你程式設計的。你需要主動的 不斷的擴充套件自己的知識領域。寫乙個學生管理系統是乙個很好的開端 但接下來,你還需要學習更多。舉例來說,圖形介面 究竟是怎麼一回事呢?我們知道,計算機螢幕實際上是乙個 色點 組成的 點陣 高清屏1920x1080 24bit,意思就是 它一共有10...
學習linux系統到底有沒捷徑?
說起linux操作系,可能對於很多不了解的人來說,第乙個想到的就是類似於黑客帝國中的黑框框以及一串串不知所云的 總之這些感覺都可以總結成為乙個字,那就是 酷,當然對於接觸過的學的不太好的人來說就是另外一回事了,可能在他們看來這東西好難呀!黑咕隆咚的,一點也不酷,根本不是電影裡演的的那樣!一大串自己不...
記憶體資料庫到底有多快
併發量太高的應用中 比如10分鐘內插入300w條記錄 資料庫往往難堪重負,在沒有銀子實現伺服器集群 負載均衡 分布式儲存的情況下,可以嘗試一下把資料庫做乙個臨時副本全部放在記憶體中處理,完成操作後,再同步到硬碟的物理資料庫中。那麼,把資料庫放在記憶體中到底有多快?晚上抽空試了一下 步驟1 先用ram...