Python數據分析學習五--數據轉換、過濾清理

Python數據分析學習五--數據轉換、過濾清理

來自專欄 daacheng的Python學習總結

數據轉換

移除重複數據(duplicated,drop_duplicates)

import numpy as np import pandas as pd from pandas import Series,DataFrame df=DataFrame({ k1:[a,a,b,b,c,c], k2:[1,1,2,2,3,4] }) df # k1 k2 #0 a 1 #1 a 1 #2 b 2 #3 b 2 #4 c 3 #5 c 4 #drop_duplicates()去除重複行 df.drop_duplicates() # k1 k2 #0 a 1 #2 b 2 #4 c 3 #5 c 4 df[k3]=range(6) df # k1 k2 k3 #0 a 1 0 #1 a 1 1 #2 b 2 2 #3 b 2 3 #4 c 3 4 #5 c 4 5 #drop_duplicates()默認判斷全部列,當全部列的數據都重複時才會去除。 df.drop_duplicates() # k1 k2 k3 #0 a 1 0 #1 a 1 1 #2 b 2 2 #3 b 2 3 #4 c 3 4 #5 c 4 5 #通過指定過濾的列來選擇數據 df.drop_duplicates([k2]) # k1 k2 k3 #0 a 1 0 #2 b 2 2 #4 c 3 4 #5 c 4 5

利用函數或映射進行數據轉換(map元素級)

import pandas as pd from pandas import Series,DataFrame #利用函數或映射進行數據轉換 data=DataFrame({ food:[火腿腸,五香牛肉,臘肉,牛排], kg:[3,4,5,6] }) data #food kg #0 火腿腸 3 #1 五香牛肉 4 #2 臘肉 5 #3 牛排 6 #現在要添加一列表示食物來源於那種動物 #方法:定義一個映射集合,通過map方法實現實現元素級轉換 meat_to_animal = { 火腿腸:pig, 五香牛肉:row, 臘肉:pig, 牛排:row } data[animal]=data[food].map(meat_to_animal) data #food kg animal #0 火腿腸 3 pig #1 五香牛肉 4 row #2 臘肉 5 pig #3 牛排 6 row

替換值(replace)

import pandas as pd from pandas import Series,DataFrame #替換值 data = Series([1,-99,2,-99]) data #0 1 #1 -99 #2 2 #3 -99 #replace()方法替指定值,不影響原Series,重新生成一個新的Series data.replace(-99,np.nan) #0 1.0 #1 NaN #2 2.0 #3 NaN #一次性替換多個值,可以傳入一個列表。 data.replace([-99,2],np.nan)#0 1.0 #1 NaN #2 NaN #3 NaN #如果要實現對不同的值進行不同的轉換 #方法一:可傳入一個由替換關係組成的列表即可 data.replace([-99,2],[np.nan,0]) #0 1.0 #1 NaN #2 0.0 #3 NaN #方法二:傳入一個對應關係列表 data.replace({-99:np.nan,2:0})

重命名軸索引

import pandas as pd from pandas import Series,DataFrame import numpy as np #重命名軸索引 data=DataFrame(np.arange(9).reshape(3,3),index=[one,two,three],columns=[a,b,c]) data # a b c #one 0 1 2 #two 3 4 5 #three 6 7 8 #通過rename方法重新命名軸索引,不修改原始數據,相當於複製一份。 data.rename(index=str.title,columns=str.upper) # A B C #One 0 1 2 #Two 3 4 5 #Three 6 7 8 #rename可以結合dict,對部分軸索引更新 data.rename(index={one:1},columns={a:aa}) # aa b c #1 0 1 2 #two 3 4 5 #three 6 7 8 #rename()方法:複製DataFrame並對其索引標籤重新複製 #可以通過inplace=True直接修改源數據 data.rename(index={one:1},columns={a:aa},inplace=True) data #aa b c #1 0 1 2 #two 3 4 5 #three 6 7 8

檢測和過濾異常值

import pandas as pd from pandas import Series,DataFrame import numpy as np #檢測和過濾異常值 data = DataFrame(np.arange(12).reshape(4,3)) #找出絕對值da大於1.2的行 data[(np.abs(data)>5).any(1)] # 0 1 2 #2 6 7 8 #3 9 10 11 #通過這種方式可以輕鬆地對值進行設定 data[np.abs(data)>5]=1 data #0 1 2 #0 0 1 2 #1 3 4 5 #2 1 1 1 #3 1 1 1

排列和隨機取樣

#排列和隨機採樣(np.random.permutation()) df=DataFrame(np.arange(12).reshape(4,3)) df #0 1 2 #0 0 1 2 #1 3 4 5 #2 6 7 8 #3 9 10 11 sampler = np.random.permutation(4) #隨機排序的數組 sampler #array([3, 0, 2, 1]) df.take(sampler) # 0 1 2 #3 9 10 11 #0 0 1 2 #1 3 4 5 #2 6 7 8 #隨機取前兩行 df.take(np.random.permutation(len(df))[:2]) #0 1 2 #3 9 10 11 #0 0 1 2

推薦閱讀:

基於Python的偽全棧運營探索性學習之路
煉丹工具集-jupyter notebook 遠程連接
python爬蟲之豆瓣音樂top250
Python imports 指北
介面測試小技巧:快速生成 python requests代碼

TAG:數據分析 | Python |