学了一段时间的pandas,结果每次想对其中的某个元素进行条件选择替换值的时候都会遇到困难。一开始想到的是用for循环,但是这样做感觉很丑一点都不美感,并且当遇到数字索引和重复索引时就不能用了。
例子:有一个矩阵,要把其中非0的元素转换为1,其余为0。(在做虚拟变量的模型时会用到)
矩阵如下
a矩阵第一种方法:之间用for循环遍历a中的每个元素,感觉这种方法很不美观,而且还会覆盖原数据。
for循环 结果并且这样做最大的缺点是当索引是数字索引并且不是0,1,2这样的顺序排的,那么会出问题
由于元素不能确切指定,这种方法就失效了第二种方法:用DataFrame的apply方法
numpy中where是一个矢量型的for循环(for是对应标量的),numpy中的where方法有这样的功能。np.where(cond,x,y),其中cond,x,y是一个等长的list,或者Series或者array都可以。当cond为Trun返回对应位置的x,否则返回对应位置的y。最终np.where返回的也是一个等长的array或者list吧(不太清楚类型)
构造如下函数,就能做出条件判断并赋值了
转换函数以df1为例(上面提到的)选出元素为不为0的,那么元素零就成了Nan就好识别了,再用apply方法就行了
大功告成并且不光是虚拟变量能用,有很多操作稍微变动下就能做,以后遇到再写吧。。
5.29更新
第三种方法:用Series的map方法,这时trans中的x是Series中的标量,不是矢量。
同样以df1中的数据为例,它的列索引是重复 的整数索引,要选取对应列,需要用到iloc方法(基于位置的索引方法)
Series的map方法
网友评论