鱼C论坛

 找回密码
 立即注册
查看: 1322|回复: 3

pandas中的apply方法疑问

[复制链接]
发表于 2019-6-24 13:57:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对于apply方法,用了几次,感觉不是很顺手。。主要是没有真正理解透,特别是针对多列数据进行处理的情况,需要传入2个以上的参数。。我一直有点不是很清楚,求指教。。
举个例子:手头一组数据,有多列。需要对数据进行填充处理。如数据缺失的情况,超过原始数据量的一般以上,则填充0。而对于数据量缺失少于一般的情况,则采用线性插值填充。
我的代码是(问题在代码中):
  1. def insert(x,i):
  2.     if x[i].isnull().sum() > x.shape[0]/2: #缺失值超过一半以上,直接填充指定值.
  3.         x[i] = x[i].fillna(0) #其余字段填充数值0
  4.     else:
  5.         x[i] = x[i].interpolate(method='linear',limit_direction = 'both')
  6.     return x  #问题1:这里需要返回的是 x[i] 还是x呢??
  7. for i in data.columns[1:]:
  8.     data = data.apply(insert,args = (i,),axis=1)
  9. #问题2:对于传入两个以上的参数,函数的第一个参数,代表数据自身,即x =data,而对于i则应该是data中的每列。这样的话,axis=1有没有必要传入?
  10. #问题3:如果数据中需要进行分组后,再应该apply,则采用groupy + apply的方法。这个时候,apply只能传入(data,i),而不是类似apply一样传入(data,args=(i))。他们的区别在哪里呢?
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-24 14:00:31 | 显示全部楼层
上述的代码,运行实际是报错的。。
提示说浮点型数据没有isnull的方法。。
但是data['列名']应该是series格式,怎么会变成浮点型呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-24 14:32:32 | 显示全部楼层
本帖最后由 老笨啊 于 2019-6-24 14:33 编辑

如果对数据进行分组处理,同样类似的方法,一种需要进行for循环,另一种则不需要。。
第一种:
  1. def standard(x,i):
  2.     x[i] = (x[i]-x[i].mean())/x[i].std()
  3.     return x
  4. data = data.groupby('ID').apply(standard,data1.columns[2:]) #这种针对ID先分组后,分别进行标准化处理,就不需要进行for循环处理,而直接传入列即可
复制代码


第二种:
  1. def insert(x,i):
  2.     if x[i].isnull().sum() > x.shape[0]/2: #缺失值超过一半以上,直接填充指定值
  3.         x[i] = x[i].fillna(0) #其余字段填充数值0
  4.     else:
  5.         x[i] = x[i].interpolate(method='linear',limit_direction = 'both')
  6.     return x
  7. for i in data.columns[2:]:
  8.     data = data.groupby('ID').apply(insert,i) #这种就无法直接传入参数,而必须采用for循环的方法,否则报错:提示第二行对比的数据格式不对:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
复制代码


我在一楼的问题,是不需要进行分组,来填充数值的。。这里的第二种,是需要进行分组处理的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-24 15:44:22 | 显示全部楼层
搞不懂的是,为什么我用分组方法,对数据进行填充,是可以的。。
不分组的情况下,进行填充,倒不行了~~~
求指点~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 13:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表