df.drop_duplicates('item_name')
成都創(chuàng)新互聯(lián)公司成立于2013年,先為萬(wàn)州等服務(wù)建站,萬(wàn)州等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為萬(wàn)州企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
方法一:
df.drop_duplicates('item_name').count()
方法二:
df['item_name'].nunique()
結(jié)果:50
附:nunique()和unique()的區(qū)別:
unique()是以 數(shù)組形式(numpy.ndarray)返回列的所有唯一值(特征的所有唯一值)
nunique()即返回的是唯一值的個(gè)數(shù)
比如:df['item_name'].unique()
要求:將下表中經(jīng)驗(yàn)列將按周統(tǒng)計(jì)的轉(zhuǎn)換為經(jīng)驗(yàn)不限,保留學(xué)歷
df1['經(jīng)驗(yàn)'] = df1['經(jīng)驗(yàn)'].apply(lambda x: '經(jīng)驗(yàn)不限'+ x[-2:] if '周' in x else x)
#解釋:將‘5天/周6個(gè)月’變成‘經(jīng)驗(yàn)不限’,然后保留學(xué)歷‘本科’
方法二:定義函數(shù)
def dataInterval(ss):
if '周' in ss:
? ? return '經(jīng)驗(yàn)不限'+ ss[-2:]
return ss
df1['經(jīng)驗(yàn)'] = df1['經(jīng)驗(yàn)'].apply(dataInterval)
這是一個(gè)字符串的全角和半角的問(wèn)題,可以導(dǎo)入?unicodedata?中的?normalize?函數(shù)先把全角轉(zhuǎn)換為半角,然后再用?set?對(duì)列表去重,參考代碼如下:
from?unicodedata?import?normalize
list3=['熱菜','凉菜','涼菜','硬菜']
set(map(lambda?s:?normalize('NFKC',?s),?list3))
輸出:
{'硬菜',?'熱菜',?'涼菜'}
擴(kuò)展:
“?NFKC”代表“Normalization?Form?KC?[Compatibility?Decomposition,?followed?by?Canonical?Composition]”,并將全角字符替換為半角字符,這些半角字符與Unicode等價(jià)。
python中對(duì)list去重的多種方法
今天遇到一個(gè)問(wèn)題,在同事隨意的提示下,用了 itertools.groupby 這個(gè)函數(shù)。不過(guò)這個(gè)東西最終還是沒(méi)用上。
問(wèn)題就是對(duì)一個(gè)list中的新聞id進(jìn)行去重,去重之后要保證順序不變。
直觀方法
最簡(jiǎn)單的思路就是:
這樣也可行,但是看起來(lái)不夠爽。
用set
另外一個(gè)解決方案就是用set:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))
這樣的結(jié)果是沒(méi)有保持原來(lái)的順序。
按照索引再次排序
最后通過(guò)這種方式解決:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)
使用itertools.grouby
文章一開(kāi)始就提到itertools.grouby, 如果不考慮列表順序的話可用這個(gè):
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)
for k, g in it:
print k
關(guān)于itertools.groupby的原理可以看這里:
網(wǎng)友補(bǔ)充:用reduce
網(wǎng)友reatlk留言給了另外的解決方案。我補(bǔ)充并解釋到這里:
代碼如下:
In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1]
In [6]: func = lambda x,y:x if y in x else x + [y]
In [7]: reduce(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]
上面是我在ipython中運(yùn)行的代碼,其中的 lambda x,y:x if y in x else x + [y] 等價(jià)于 lambda x,y: y in x and x or x+[y] 。
代碼如下:
def func1(num_list):
if len(num_list) != len(set(num_list)):
return True
else:
return False
if __name__ == '__main__':
num_list = [[1, 2, 3, 4], [6, 7, 8], [4, 5, 6, 6, 6]]
for one_list in num_list:
print(func1(one_list))
運(yùn)行結(jié)果:
擴(kuò)展資料
python對(duì)列表去重的幾種方式:
1、直觀方法,先建立一個(gè)新的空列表,通過(guò)遍歷原來(lái)的列表,再利用邏輯關(guān)系not in 來(lái)去重。總結(jié):這樣可以做出來(lái),但是過(guò)程不夠簡(jiǎn)單。但是此方法保證了列表的順序性。
2、利用set的自動(dòng)去重功能,將列表轉(zhuǎn)化為集合再轉(zhuǎn)化為列表,利用集合的自動(dòng)去重功能。簡(jiǎn)單快速。缺點(diǎn)是:使用set方法無(wú)法保證去重后的順序。
參考資料:python官網(wǎng)-Doc語(yǔ)法文檔
網(wǎng)頁(yè)題目:python函數(shù)去重博客,Python去重
URL鏈接:http://www.yijiale78.com/article12/dsiojgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、云服務(wù)器、小程序開(kāi)發(fā)、定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)