在進行數(shù)據(jù)處理時,如果數(shù)據(jù)簡單,數(shù)量不多,excel是大家的首選。但是當(dāng)數(shù)據(jù)眾多,類型復(fù)雜,需要靈活地顯示切片、進行索引、以及排序時,python會更加方便。借助python中的numpy和pandas庫,它能快速完成各種任務(wù),包括數(shù)據(jù)的創(chuàng)建、檢查、清洗、預(yù)處理、提取、篩選、匯總、統(tǒng)計等。接下來幾篇文章,將以excel為參照,介紹python中數(shù)據(jù)的處理。
成都創(chuàng)新互聯(lián)公司于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元湖州做網(wǎng)站,已為上家服務(wù),為湖州各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
提到pandas,那就不得不提兩類重要的數(shù)據(jù)結(jié)構(gòu),Series和DataFrame,這兩類數(shù)據(jù)結(jié)構(gòu)都是建立在numpy的數(shù)組array基礎(chǔ)上。與array相比,Series是一個一維的數(shù)據(jù)集,但是每個數(shù)據(jù)元素都帶有一個索引,有點類似于字典。而DataFrame在數(shù)組的基礎(chǔ)上,增加了行索引和列索引,類似于Series的字典,或者說是一個列表集。
所以在數(shù)據(jù)處理前,要安裝好numpy , pandas。接下來就看看如何完成一套完整的數(shù)據(jù)操作。
創(chuàng)建數(shù)據(jù)表的方法分兩種,分別是從外部導(dǎo)入數(shù)據(jù),以及直接寫入數(shù)據(jù)。
在python中,也可外部導(dǎo)入xlsx格式文件,使用read_excel()函數(shù):
import pandas as pd
from pandas import DataFrame,Series
data=DataFrame(pd.read_excel('c:/python27/test.xlsx'))
print data
輸出:
Gene Size Function
0 arx1 411 NaN
1 arx2 550 monooxygenase
2 arx3 405 aminotransferase
……
即:調(diào)用pandas中read_excel屬性,來讀取文件test.xlsx,并轉(zhuǎn)換成DataFrame格式,賦給變量data。在每一行后,自動分了一個索引值。除了excel,還支持以下格式文件的導(dǎo)入和寫入:
Python寫入的方法有很多,但還是不如excel方便。常用的例如使用相等長度的字典或numpy數(shù)組來創(chuàng)建:
data1 = DataFrame(
{'Gene':['arx1','arx2','arx3'],
'Size':[411,550,405],
'Func':[np.NaN,'monooxygenase','aminotransferase ']})
print data1
輸出
Func Gene Size
0 NaN arx1 411
1 monooxyg arx2 550
2 amino arx3 405
分配一個行索引后,自動排序并輸出。
在python中,可以使用info()函數(shù)查看整個數(shù)據(jù)的詳細信息。
print data.info()
輸出
RangeIndex: 7 entries, 0 to 6
Data columns (total 3 columns):
Gene 7 non-null object
Size 7 non-null int64
Function 5 non-null object
dtypes: int64(1), object(2)
memory usage: 240.0+ bytes
None
此外,還可以通過shape, column, index, values, dtypes等函數(shù)來查看數(shù)據(jù)維度、行列組成、所有的值、 數(shù)據(jù)類型:
print data1.shape
print data1.index
print data1.columns
print data1.dtypes
輸出
(3, 3)
RangeIndex(start=0, stop=3, step=1)
Index([u'Func', u'Gene', u'Size'], dtype='object')
Func object
Gene object
Size int64
dtype: object
在excel中可以按“F5”,在“定位條件”中選擇“空值”,選中后,輸入替換信息,再按“Ctrl+Enter”即可完成替換。
在python中,使用函數(shù) isnull 和 notnull 來檢測數(shù)據(jù)丟失, 包含空值返回True,不包含則返回False。
pd.isnull(data1)
pd.notnull(data1)
也可以使用函數(shù)的實例方法,以及加入?yún)?shù),對某一列進行檢查:
print data1['Func'].isnull()
輸出
Func Gene Size
0 True False False
1 False False False
2 False False False
再使用fillna對空值進行填充:
data.fillna(value=0)
#用0來填充空值
data['Size'].fillna(data1['Size'].mean())
#用data1中Size列的平均值來填充空值
data['Func']=data['Func'].map(str.strip)
#清理Func列中存在的空格
Excel中可以按“Ctrl+F”,可調(diào)出替換對話框,替換相應(yīng)數(shù)據(jù)。
Python中,使用replace函數(shù)替換:
data['Func'].replace('monooxygenase', 'oxidase')
將Func列中的'monooxygenase'替換成'oxidase'。
Excel中,通過“數(shù)據(jù)-篩選-高級”可以選擇性地看某一列的唯一值。
Python中,使用unique函數(shù)查看:
print data['Func'].unique()
輸出
[nan u'monooxygenase' u'aminotransferase' u'methyltransferase']
Excel中,通過UPPER、LOWER、PROPER等函數(shù)來變成大寫、小寫、首字母大寫。
Python中也有同名函數(shù):
data1['Gene'].str.lower()
Excel中可以通過“數(shù)據(jù)-刪除重復(fù)項”來去除重復(fù)值。
Python中,可以通過drop_duplicates函數(shù)刪除重復(fù)值:
print data['Func'].drop_duplicates()
輸出
0 NaN
1 monooxygenase
2 aminotransferase
3 methyltransferase
Name: Func, dtype: object
還可以設(shè)置“ keep=’last’ ”參數(shù),后出現(xiàn)的被保留,先出現(xiàn)的被刪除:
print data['Func'].drop_duplicates(keep='last')
輸出
2 aminotransferase
3 methyltransferase
6 monooxygenase
8 NaN
Name: Func, dtype: object
內(nèi)容參考:
Python For Data Analysis
藍鯨網(wǎng)站分析博客,作者藍鯨(王彥平)
1. 使用內(nèi)置函數(shù)set
lists = [1,1,2,3,4,6,6,2,2,9]
lists = list(set(lists))
先將列表轉(zhuǎn)換為集合,因為集合是不重復(fù)的,故直接刪除重復(fù)元素,而且輸出結(jié)果為排序后的
如果你知道他的索引(index)
假設(shè)他的索引存在變量a中
列表名為list
list.pop(a)
當(dāng)然,也可以用remove函數(shù)
但是,局限于只能刪第一個
比如:
a=[0,1,1,1,2,3,3]
a.remove(1)
print(a)
結(jié)果為:
[0, 1, 1, 2, 3, 3]
from pandas import read_csv
df = read_csv('D://PDA//4.3//data.csv')
df
#找出行重復(fù)的位置
dIndex = df.duplicated()
#根據(jù)某些列,找出重復(fù)的位置
dIndex = df.duplicated('id')
dIndex = df.duplicated(['id', 'key'])
#根據(jù)返回值,把重復(fù)數(shù)據(jù)提取出來
df[dIndex]
id? key? ? ? ? ? value
4? 1251147? ? 品牌? ? ? ? ? Apple
5? 1251147? 商品名稱? 蘋果iPad mini 3
#直接刪除重復(fù)值
#默認根據(jù)所有的列,進行刪除
newDF = df.drop_duplicates()
#當(dāng)然也可以指定某一列,進行重復(fù)值處理
newDF = df.drop_duplicates('id')
Duplicated函數(shù)功能:查找并顯示數(shù)據(jù)表中的重復(fù)值
這里需要注意的是:
drop_duplicates函數(shù)功能是:刪除數(shù)據(jù)表中的重復(fù)值,判斷標(biāo)準(zhǔn)和邏輯與duplicated函數(shù)一樣
前兩天處理數(shù)據(jù)的時候,需要得到兩個數(shù)據(jù)的交集數(shù)據(jù),所以要去除數(shù)據(jù)中非重復(fù)部分,只保留數(shù)據(jù)中的重復(fù)部分。
?? 網(wǎng)上看了一下大家的教程,大部分都是教去除重復(fù)行,很少有說到僅保留重復(fù)行的。所以在這里用drop_duplicates這個去重函數(shù)來實現(xiàn)這個功能。
drop_duplicates函數(shù)介紹 :
data.drop_duplicates(subset=[‘A’,‘B’],keep=‘first’,inplace=True)
#subset對應(yīng)的值是列名,表示只考慮這兩列,將這兩列對應(yīng)值相同的行進行去重。
默認值為subset=None表示考慮所有列。
keep='first’表示保留第一次出現(xiàn)的重復(fù)行,是默認值。
keep另外兩個取值為"last"和False,分別表示保留最后一次出現(xiàn)的重復(fù)行和去除所有重復(fù)行。
inplace=True表示直接在原來的DataFrame上刪除重復(fù)項,而默認值False表示生成一個副本。
要用函數(shù)取得數(shù)據(jù)集data中的重復(fù)列,分三個步驟 :
(提前導(dǎo)入pandas模塊)
data0_1 = data.drop_duplicates() #保留第一個重復(fù)行
data0_2 = data.drop_duplicates(keep=False) #去除所有重復(fù)行
data0_3=pd.concat([data0_1,data0_2]).drop_duplicates(keep=False)
#合并起來再去重,只剩下真的重復(fù)行。
舉例:data中wangwu行和tony行重復(fù),需要把它們兩行取出。
第一步:#保留第一個重復(fù)行
第二步:#去除所有重復(fù)行
第三步:#合并起來再去重
通過以上步驟實現(xiàn)取出數(shù)據(jù)中的重復(fù)行。
網(wǎng)站標(biāo)題:python刪除重復(fù)函數(shù) python編寫程序刪除列表中的重復(fù)值
文章分享:http://chinadenli.net/article12/hgpcgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、軟件開發(fā)、虛擬主機、網(wǎng)站設(shè)計、網(wǎng)站排名、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)