學習pandas資料合併到底有什麼技巧

2021-10-04 13:44:30 字數 4506 閱讀 9102

本篇的文章主要講述了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...