欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 數(shù)據(jù)清洗之?dāng)?shù)據(jù)合并、轉(zhuǎn)換、過(guò)濾、排序

 更新時(shí)間:2017年02月12日 14:56:05   作者:molearner  
這篇文章主要介紹了python 數(shù)據(jù)清洗之?dāng)?shù)據(jù)合并、轉(zhuǎn)換、過(guò)濾、排序的相關(guān)資料,需要的朋友可以參考下

前面我們用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中提取樣本。

相關(guān)文章

最新評(píng)論