是否大量使用自定義函數(shù)是區(qū)分編程小白和老手的重要指標享郊。
雖然在處理數(shù)據(jù)時发皿,使用自定義函數(shù)能夠大大縮減時間,并且達到一些別的方法沒法完成的效果拂蝎。在熟練的數(shù)據(jù)分析員代碼里穴墅,大部分的篇幅都是在定義函數(shù),而最后的應用只占很小的篇幅温自。
apply()是對DataFrame里的每行或列進行函數(shù)應用玄货。
applymap()是對DataFrame里的每個元素進行函數(shù)的應用。
map()是對Series里(就是單獨的一列)的每個元素進行函數(shù)應用悼泌。
把price和total_price兩列改成兩位小數(shù)的浮點數(shù):
需要注意的是使用lambda保留兩位小數(shù)之后的數(shù)據(jù)是object類型的松捉,而不是浮點型,需要經(jīng)過轉(zhuǎn)換之后才能變成浮點型馆里。
其它列都不是數(shù)值隘世,不能使用保留兩位小數(shù)的函數(shù),所以只能對這兩列進行使用鸠踪。
如果只對一列進行處理需要使用map()丙者,用其它的函數(shù)會報錯:
還可以把修改后的結(jié)果賦值到源數(shù)據(jù):
lambda在這里其實是在定義一個簡單的函數(shù),一個沒有函數(shù)名的函數(shù)营密。
還可以先對某一列進行操作之后在進行保留兩位小數(shù):
以上的操作之后數(shù)據(jù)類型都變成object械媒,而不是浮點數(shù)或者整數(shù)類型,因此我們需要將其轉(zhuǎn)換成浮點數(shù)或者整數(shù)(使用.convert_objects(convert_numeric=True)來進行轉(zhuǎn)換):
然后就可以使用運算符進行計算了:
不過使用.convert_objects(convert_numeric=True)轉(zhuǎn)換后進行計算不是Python推薦的使用方法评汰,Python推薦使用的是pd.to_numeric的方法:
對轉(zhuǎn)換后的數(shù)據(jù)進行計算:
不過這個方式一次只能改一個列纷捞,而不是選擇多列統(tǒng)一進行更改。
那么如果我們要在把每一列的數(shù)值都進行計算被去,然后在最底下加上一行總計要怎么操作呢主儡?
這個使用就不能使用lambda函數(shù)了,而是需要進行自定義函數(shù)(當然也可以使用前面說過的方法)惨缆,先定義一個求和的函數(shù):
如果是想要對行進行計算的話只需要添加參數(shù)axis=1就可以了糜值。
還有一點需要注意的是:pandas自帶的函數(shù)不要用apply(),map()等這些函數(shù)踪央,只需要直接一個點‘.’就可以了臀玄。