九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
基于pandas.merge解決異源數(shù)據(jù)融合的問題

寫在前言:

1. 閱讀,并不是為了記住所有的細(xì)節(jié),而是要知曉這個事物的存在,并在合適的時機去使用它;

2. 當(dāng)你跟隨別人使用一個技術(shù)時,往往并不能感受其存在的必要意義,然而,當(dāng)你帶著問題去尋找解決方案時,在找到的那一剎,一定能深深地體會到其存在的合理性和必要性。


        在做數(shù)據(jù)分析時,經(jīng)常會遇到這樣的問題:數(shù)據(jù)分布在多個數(shù)據(jù)源,當(dāng)從這些數(shù)據(jù)源查詢數(shù)據(jù)時,每個數(shù)據(jù)源都得到一個list,每個list中有著不同意義的字段數(shù)據(jù),那么如何將多個list的數(shù)據(jù)內(nèi)容合并成一個list來做統(tǒng)計分析?舉個例子,我需要分析不同城市的人對某個page的點擊次數(shù),數(shù)據(jù)分布在MySQLMongoDB中。

1)MySQL中查詢出來的數(shù)據(jù):

        [{'city': 'BeiJing', 'user_id': 1}, 
         {'city': 'NanJing', 'user_id': 2}, 
         {'city': 'BeiJing', 'user_id': 3}, 
         {'city': 'TianJin', 'user_id': 4}]

2)MongoDB中查詢出來的數(shù)據(jù):

        [{'page_click_count': 20, 'user_id': 1},
         {'page_click_count': 38, 'user_id': 2},
         {'page_click_count': 10, 'user_id': 3}]

3)現(xiàn)在需要將兩個列表融合起來,得到一個新的列表:

        [{'city': 'BeiJing', 'page_click_count': 20, 'user_id': 1}, 
         {'city': 'NanJing', 'page_click_count': 38, 'user_id': 2}, 
         {'city': 'BeiJing', 'page_click_count': 10, 'user_id': 3}, 
         {'city': 'TianJin', 'page_click_count': 0, 'user_id': 4}]


        這樣的問題在實際操作中會遇到很多,對應(yīng)單純的MySQL還好,如果是多個數(shù)據(jù)源或者MongoDB(MongoDB不支持JOIN),就會比較棘手了,我們且將這個問題稱為異源數(shù)據(jù)融合問題(這里暫不考慮優(yōu)化數(shù)據(jù)源的問題)。

        要解決這個問題,通過程序編寫邏輯來實現(xiàn)肯定是可以做到的,比如對第一個列表生成一個dict,然后循環(huán)第二個列表,如果發(fā)現(xiàn)dict中有user_id就插入對應(yīng)數(shù)據(jù)到第二個列表中。然而,如果需要融合的不止2個,而是超過四五個,這么做就會顯得很丑陋和繁瑣了,此時,你可以選擇自己封裝一個API,或者尋找已有的解決方案。

        在遇到這個問題之前,筆者就接觸過一點pandas庫的知識,但是因為沒有很強的業(yè)務(wù)需求就沒有深入使用,但是在大腦中還是保留著一個印象的:pandas是一個強大的數(shù)據(jù)分析工具包,其核心基礎(chǔ)是數(shù)組和矩陣。帶著上面的疑問和對panadas的一點點認(rèn)知,開始google尋找解決方案。而pandas正好提供了這么一個強大的將數(shù)據(jù)規(guī)整化的方法:pandas.merge。

        pandas.merge可以根據(jù)一個或多個鍵將不同的DataFrame中的行連接起來,實現(xiàn)了SQL JOIN風(fēng)格的合并方法。以上面的問題為例,

1)構(gòu)建數(shù)據(jù)結(jié)構(gòu)DataFrame(Series與DataFrame是pandas的核心數(shù)據(jù)結(jié)構(gòu)):


2)調(diào)用merge函數(shù),實現(xiàn)數(shù)據(jù)合并:


        是不是很簡單?通過調(diào)用pandas.merge方法直接就解決了上述的問題,即使有多個數(shù)據(jù)源數(shù)據(jù),也可以輕松的解決。如果你比較細(xì)心,那么一定會發(fā)現(xiàn)幾個問題:

1)這里,并沒有指定要用哪個列來做JOIN。默認(rèn)的,如果沒有指定,pandas就會將重疊列的列名作為鍵,不過,最好是顯示指定一下:


但是,如果兩個DataFrame對象的列名不同,該如何做呢?pandas也為你想到了,可以分別指定兩個不同名字的列名來做JOIN:


2)原始數(shù)據(jù)中有四個用戶id,而在上面的結(jié)果中,只有id為1,2,3的用戶,那么id=4的那個用戶信息哪里去了?id=4的數(shù)據(jù)消失是因為我們這里沒有指定JOIN的方式,默認(rèn)的,pandas使用的是INNER方式,跟SQL語法一樣,只取能完全匹配的數(shù)據(jù),如果需要保留id=4的用戶信息,則需要使用LEFT的方式,如下:



        通過pandas提供的merge方法,我們完美的解決了文章開始時提出的異源數(shù)據(jù)融合的問題,而pandas的強大之處遠(yuǎn)遠(yuǎn)不止于此,有需求就有解決方案,pandas的存在正是為了解決各個數(shù)據(jù)分析人員的痛楚,而我們要做的是合理使用其功能來解決實際問題。

        附:關(guān)于pandas.merge的使用參數(shù),可以進一步查看官方文檔



(全文完,本文地址:http://blog.csdn.net/zwgdft/article/details/53144591

Bruce,2016/11/15




本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python學(xué)習(xí)教程:從Excel到Python:最常用到的Pandas函數(shù)(下)
Pandas 用法總結(jié)
統(tǒng)計師的Python日記【第6天:數(shù)據(jù)合并】
合并多個Excel文件,Python相當(dāng)輕松
用Python做數(shù)據(jù)分析,這些基本數(shù)據(jù)分析技術(shù)你知道嗎?贈學(xué)習(xí)資料
玩轉(zhuǎn)Mongo計算
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服