python 數據清洗之數據合併、轉換、過濾、排序

數據合併


在pandas中可以通過merge對數據進行合併操作。


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)


結果爲:




print(data2)


結果爲:




print(pd.merge(data1,data2))


結果爲:




可以看到data1和data2中用於相同標籤的字段顯示,而其他字段則被捨棄,這相當於SQL中做inner join連接操作。


此外還有outer,ringt,left等連接方式,用關鍵詞how的進行表示。


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'))


結果爲:




兩個數據框中如果列名不同的情況下,我們可以通過指定letf_on 和right_on兩個參數把數據連接在一起


print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))


結果爲:




其他詳細參數說明




重疊數據合併


有時候我們會遇到重疊數據需要進行合併處理,此時可以用comebine_first函數。


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))


結果爲:




可以看到相同標籤下的內容優先顯示data3的內容,如果一個數據框中的某一個數據是缺失的,此時另外一個數據框中的元素就會補上

這裏的用法類似於np.where(isnull(a),b,a)


數據重塑和軸向旋轉


這個內容我們在上一篇pandas文章有提到過。數據重塑主要使用reshape函數,旋轉主要使用unstack和stack兩個函數。


data=pd.DataFrame(np.arange(12).reshape(3,4),

              columns=['a','b','c','d'],

              index=['wang','li','zhang'])

print(data)


結果爲:




print(data.unstack())


結果爲:




數據轉換


刪除重複行數據


data=pd.DataFrame({'a':[1,3,3,4],

              'b':[1,3,3,5]})

print(data)


結果爲:




print(data.duplicated())


結果爲:




可以看出第三行是重複第二行的數據所以,顯示結果爲True


另外用drop_duplicates方法可以去除重複行


print(data.drop_duplicates())


結果爲:




換值


除了使用我們上一篇文章中提到的fillna的方法外,還可以用replace方法,而且更簡單快捷


data=pd.DataFrame({'a':[1,3,3,4],

              'b':[1,3,3,5]})

print(data.replace(1,2))


結果爲:




多個數據一起換


print(data.replace([1,4],np.nan))




數據分段


data=[11,15,18,20,25,26,27,24]

bins=[15,20,25]

print(data)

print(pd.cut(data,bins))


結果爲:


[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]]


可以看出分段後的結果,不在分段內的數據顯示爲na值,其他則顯示數據所在的分段。


print(pd.cut(data,bins).labels)


結果爲:


[-1 -1 0 0 1 -1 -1 1]


顯示所在分段排序標籤


print(pd.cut(data,bins).levels)


結果爲:


Index([‘(15, 20]’, ‘(20, 25]’], dtype=’object’)


顯示所以分段標籤


print(value_counts(pd.cut(data,bins)))


結果爲:




顯示每個分段值得個數


此外還有一個qcut的函數可以對數據進行4分位切割,用法和cut類似。


排列和採樣


我們知道排序的方法有好幾個,比如sort,order,rank等函數都能對數據進行排序


現在要說的這個是對數據進行隨機排序(permutation)


data=np.random.permutation(5)

print(data)


結果爲:


[1 0 4 2 3]


這裏的peemutation函數對0-4的數據進行隨機排序的結果。

也可以對數據進行採樣


df=pd.DataFrame(np.arange(12).reshape(4,3))

samp=np.random.permutation(3)

print(df)


結果爲:




print(samp)


結果爲:


[1 0 2]


print(df.take(samp))


結果爲:




發佈了34 篇原創文章 · 獲贊 328 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章