python 數(shù)據(jù)清洗之?dāng)?shù)據(jù)合并、轉(zhuǎn)換、過(guò)濾、排序
前面我們用pandas做了一些基本的操作,接下來(lái)進(jìn)一步了解數(shù)據(jù)的操作,
數(shù)據(jù)清洗一直是數(shù)據(jù)分析中極為重要的一個(gè)環(huán)節(jié)。
數(shù)據(jù)合并
在pandas中可以通過(guò)merge對(duì)數(shù)據(jù)進(jìn)行合并操作。
import numpy as np import pandas as pd data1 = pd.DataFrame({'level':['a','b','c','d'], 'numeber':[1,3,5,7]}) data2=pd.DataFrame({'level':['a','b','c','e'], 'numeber':[2,3,6,10]}) print(data1)
結(jié)果為:
print(data2)
結(jié)果為:
print(pd.merge(data1,data2))
結(jié)果為:
可以看到data1和data2中用于相同標(biāo)簽的字段顯示,而其他字段則被舍棄,這相當(dāng)于SQL中做inner join連接操作。
此外還有outer,ringt,left等連接方式,用關(guān)鍵詞how的進(jìn)行表示。
data3 = pd.DataFrame({'level1':['a','b','c','d'], 'numeber1':[1,3,5,7]}) data4=pd.DataFrame({'level2':['a','b','c','e'], 'numeber2':[2,3,6,10]}) print(pd.merge(data3,data4,left_on='level1',right_on='level2'))
結(jié)果為:
兩個(gè)數(shù)據(jù)框中如果列名不同的情況下,我們可以通過(guò)指定letf_on 和right_on兩個(gè)參數(shù)把數(shù)據(jù)連接在一起
print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))
結(jié)果為:
其他詳細(xì)參數(shù)說(shuō)明
重疊數(shù)據(jù)合并
有時(shí)候我們會(huì)遇到重疊數(shù)據(jù)需要進(jìn)行合并處理,此時(shí)可以用comebine_first函數(shù)。
data3 = pd.DataFrame({'level':['a','b','c','d'], 'numeber1':[1,3,5,np.nan]}) data4=pd.DataFrame({'level':['a','b','c','e'], 'numeber2':[2,np.nan,6,10]}) print(data3.combine_first(data4))
結(jié)果為:
可以看到相同標(biāo)簽下的內(nèi)容優(yōu)先顯示data3的內(nèi)容,如果一個(gè)數(shù)據(jù)框中的某一個(gè)數(shù)據(jù)是缺失的,此時(shí)另外一個(gè)數(shù)據(jù)框中的元素就會(huì)補(bǔ)上
這里的用法類似于np.where(isnull(a),b,a)
數(shù)據(jù)重塑和軸向旋轉(zhuǎn)
這個(gè)內(nèi)容我們?cè)谏弦黄猵andas文章有提到過(guò)。數(shù)據(jù)重塑主要使用reshape函數(shù),旋轉(zhuǎn)主要使用unstack和stack兩個(gè)函數(shù)。
data=pd.DataFrame(np.arange(12).reshape(3,4), columns=['a','b','c','d'], index=['wang','li','zhang']) print(data)
結(jié)果為:
print(data.unstack())
結(jié)果為:
數(shù)據(jù)轉(zhuǎn)換
刪除重復(fù)行數(shù)據(jù)
data=pd.DataFrame({'a':[1,3,3,4], 'b':[1,3,3,5]}) print(data)
結(jié)果為:
print(data.duplicated())
結(jié)果為:
可以看出第三行是重復(fù)第二行的數(shù)據(jù)所以,顯示結(jié)果為True
另外用drop_duplicates方法可以去除重復(fù)行
print(data.drop_duplicates())
結(jié)果為:
替換值
除了使用我們上一篇文章中提到的fillna的方法外,還可以用replace方法,而且更簡(jiǎn)單快捷
data=pd.DataFrame({'a':[1,3,3,4], 'b':[1,3,3,5]}) print(data.replace(1,2))
結(jié)果為:
多個(gè)數(shù)據(jù)一起換
print(data.replace([1,4],np.nan))
數(shù)據(jù)分段
data=[11,15,18,20,25,26,27,24] bins=[15,20,25] print(data) print(pd.cut(data,bins))
結(jié)果為:
[11, 15, 18, 20, 25, 26, 27, 24][NaN, NaN, (15, 20], (15, 20], (20, 25], NaN, NaN, (20, 25]]
Categories (2, object): [(15, 20] < (20, 25]]
可以看出分段后的結(jié)果,不在分段內(nèi)的數(shù)據(jù)顯示為na值,其他則顯示數(shù)據(jù)所在的分段。
print(pd.cut(data,bins).labels)
結(jié)果為:
[-1 -1 0 0 1 -1 -1 1]
顯示所在分段排序標(biāo)簽
print(pd.cut(data,bins).levels)
結(jié)果為:
Index([‘(15, 20]', ‘(20, 25]'], dtype='object')
顯示所以分段標(biāo)簽
print(value_counts(pd.cut(data,bins)))
結(jié)果為:
顯示每個(gè)分段值得個(gè)數(shù)
此外還有一個(gè)qcut的函數(shù)可以對(duì)數(shù)據(jù)進(jìn)行4分位切割,用法和cut類似。
排列和采樣
我們知道排序的方法有好幾個(gè),比如sort,order,rank等函數(shù)都能對(duì)數(shù)據(jù)進(jìn)行排序
現(xiàn)在要說(shuō)的這個(gè)是對(duì)數(shù)據(jù)進(jìn)行隨機(jī)排序(permutation)
data=np.random.permutation(5) print(data)
結(jié)果為:
[1 0 4 2 3]
這里的peemutation函數(shù)對(duì)0-4的數(shù)據(jù)進(jìn)行隨機(jī)排序的結(jié)果。
也可以對(duì)數(shù)據(jù)進(jìn)行采樣
df=pd.DataFrame(np.arange(12).reshape(4,3)) samp=np.random.permutation(3) print(df)
結(jié)果為:
print(samp)
結(jié)果為:
[1 0 2]
print(df.take(samp))
結(jié)果為:
這里使用take的結(jié)果是,按照samp的順序從df中提取樣本。
- 用Python實(shí)現(xiàn)網(wǎng)易云音樂(lè)的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗和可視化分析
- Python數(shù)據(jù)清洗工具之Numpy的基本操作
- python 利用已有Ner模型進(jìn)行數(shù)據(jù)清洗合并代碼
- python實(shí)現(xiàn)數(shù)據(jù)清洗(缺失值與異常值處理)
- python3常用的數(shù)據(jù)清洗方法(小結(jié))
- 8段用于數(shù)據(jù)清洗Python代碼(小結(jié))
- 對(duì)python數(shù)據(jù)清洗容易遇到的函數(shù)-re.sub bytes string詳解
- python數(shù)據(jù)清洗系列之字符串處理詳解
- Python?八個(gè)數(shù)據(jù)清洗實(shí)例代碼詳解
相關(guān)文章
SQLite5-使用Python來(lái)讀寫(xiě)數(shù)據(jù)庫(kù)
這篇文章主要介紹了SQLite5-使用Python來(lái)讀寫(xiě)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的實(shí)際應(yīng)用,通常需要與程序結(jié)合起來(lái),通過(guò)程序來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和讀寫(xiě)。本篇先介紹Python語(yǔ)言來(lái)調(diào)用SQLite數(shù)據(jù)庫(kù),想具體了解的小伙伴可以參考一下</P><P>2021-12-12基于python+selenium自動(dòng)健康打卡的實(shí)現(xiàn)代碼
這篇文章主要介紹了基于python+selenium自動(dòng)健康打卡,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Python基礎(chǔ)學(xué)習(xí)之基本數(shù)據(jù)結(jié)構(gòu)詳解【數(shù)字、字符串、列表、元組、集合、字典】
這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)之基本數(shù)據(jù)結(jié)構(gòu),結(jié)合實(shí)例形式分析了Python數(shù)字、字符串、列表、元組、集合、字典等基本數(shù)據(jù)類型功能、原理及相關(guān)使用技巧,需要的朋友可以參考下2019-06-06python 使用get_argument獲取url query參數(shù)
這篇文章主要介紹了python 使用get_argument獲取url query參數(shù)的相關(guān)資料,需要的朋友可以參考下2017-04-04Python網(wǎng)絡(luò)編程基于多線程實(shí)現(xiàn)多用戶全雙工聊天功能示例
這篇文章主要介紹了Python網(wǎng)絡(luò)編程基于多線程實(shí)現(xiàn)多用戶全雙工聊天功能,結(jié)合實(shí)例形式分析了Python網(wǎng)絡(luò)編程中使用多線程進(jìn)行多用戶異步通信的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04Python對(duì)象的屬性訪問(wèn)過(guò)程詳解
這篇文章主要介紹了Python對(duì)象的屬性訪問(wèn)過(guò)程詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python隨機(jī)生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點(diǎn)
這篇文章主要為大家詳細(xì)介紹了Python隨機(jī)生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12