學(xué)了一段時間的pandas,結(jié)果每次想對其中的某個元素進行條件選擇替換值的時候都會遇到困難。一開始想到的是用for循環(huán),但是這樣做感覺很丑一點都不美感,并且當(dāng)遇到數(shù)字索引和重復(fù)索引時就不能用了。
例子:有一個矩陣,要把其中非0的元素轉(zhuǎn)換為1,其余為0。(在做虛擬變量的模型時會用到)
矩陣如下

a矩陣
第一種方法:之間用for循環(huán)遍歷a中的每個元素,感覺這種方法很不美觀,而且還會覆蓋原數(shù)據(jù)。

for循環(huán)

結(jié)果
并且這樣做最大的缺點是當(dāng)索引是數(shù)字索引并且不是0,1,2這樣的順序排的,那么會出問題

由于元素不能確切指定,這種方法就失效了
第二種方法:用DataFrame的apply方法
numpy中where是一個矢量型的for循環(huán)(for是對應(yīng)標量的),numpy中的where方法有這樣的功能。np.where(cond,x,y),其中cond,x,y是一個等長的list,或者Series或者array都可以。當(dāng)cond為Trun返回對應(yīng)位置的x,否則返回對應(yīng)位置的y。最終np.where返回的也是一個等長的array或者list吧(不太清楚類型)
構(gòu)造如下函數(shù),就能做出條件判斷并賦值了

轉(zhuǎn)換函數(shù)
以df1為例(上面提到的)選出元素為不為0的,那么元素零就成了Nan就好識別了,再用apply方法就行了

大功告成
并且不光是虛擬變量能用,有很多操作稍微變動下就能做,以后遇到再寫吧。。
5.29更新
第三種方法:用Series的map方法,這時trans中的x是Series中的標量,不是矢量。
同樣以df1中的數(shù)據(jù)為例,它的列索引是重復(fù) 的整數(shù)索引,要選取對應(yīng)列,需要用到iloc方法(基于位置的索引方法)

Series的map方法