有時(shí)會(huì)碰到小伙伴們提問了一些有趣的問題浑度,在此向大家分享其中一個(gè)數(shù)據(jù)清洗的例子:
某位小伙伴問到,某個(gè)Pandas數(shù)據(jù)框中的某一列鸦概,比如df['Price']這一列,該列中的每一行的值,有些是帶有千分位符號(hào)(逗號(hào))的數(shù)字字符串窗市,比如'2,399'先慷,'3,699,799'等,有些是無"千分位符"的值咨察,比如'999'等论熙,這些值都必須轉(zhuǎn)換為int或float,才能做各種數(shù)學(xué)或聚合運(yùn)算摄狱,那么脓诡,假設(shè)現(xiàn)在要去掉千分位(逗號(hào)),拼接媒役,轉(zhuǎn)換類型等一氣呵成的操作祝谚,要如何實(shí)現(xiàn)呢?
解決思路和邏輯實(shí)現(xiàn)其實(shí)都很簡單酣衷,可以自定義一個(gè)函數(shù)convert()交惯,先判斷類型,再判斷"不帶逗號(hào)"或"帶逗號(hào)"穿仪,帶逗號(hào)就利用字符串中的split()方法席爽,以逗號(hào)做為分隔符,返回list后循環(huán)處理啊片,再附加到1個(gè)字符串只锻,最后返回的是用來表示金額的浮點(diǎn)數(shù)類型,廢話我就不說了紫谷,直接上代碼齐饮,假設(shè)數(shù)據(jù)框df(模擬讀取csv文件后所返回的df)和數(shù)據(jù)是這樣子的:
然后搭配Pandas中特別好用的map()方法或apply()方法,并將函數(shù)convert做為參數(shù)傳入碴里,直接批次或“向量”處理了:
PS:
大家要特別注意apply()/applymap()/map()它們之間的異同與用法沈矿,這里使用的是Series對(duì)象的map()方法
最后看下數(shù)據(jù)類型,也是期待中的結(jié)果咬腋,即數(shù)值型的數(shù)據(jù)類型羹膳,是不是很簡單啊根竿!