TypeError: len() of unsized object

  • 在使用pandas时,使用groupby对DataFrame对象分组,出现了该错误
  • 堆栈信息:
Traceback (most recent call last):
  File "F:/workspace/sign_rate 4.0/machine_learning/sign_rate.py", line 364, in <module>
    p.predict(begin_date="2019-10-01")
  File "F:/workspace/sign_rate 4.0/machine_learning/sign_rate.py", line 196, in predict
    return self.get_complete_proportion_sign_rate(subdivide, mode)
  File "F:/workspace/sign_rate 4.0/machine_learning/sign_rate.py", line 228, in get_complete_proportion_sign_rate
    return self.get_month_cpsr(self.df, subdivide, mode)
  File "F:/workspace/sign_rate 4.0/machine_learning/sign_rate.py", line 248, in get_month_cpsr
    return self.get_category_cpsr(df, subdivide, mode)
  File "F:/workspace/sign_rate 4.0/machine_learning/sign_rate.py", line 285, in get_category_cpsr
    for cate, df_cate in df_area.groupby(by=subdivide):
  File "F:\envs\data_analysis\lib\site-packages\pandas\core\generic.py", line 7894, in groupby
    **kwargs
  File "F:\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py", line 2522, in groupby
    return klass(obj, by, **kwds)
  File "F:\envs\data_analysis\lib\site-packages\pandas\core\groupby\groupby.py", line 391, in __init__
    mutated=self.mutated,
  File "F:\envs\data_analysis\lib\site-packages\pandas\core\groupby\grouper.py", line 652, in _get_grouper
    if not isinstance(gpr, Grouping)
  File "F:\envs\data_analysis\lib\site-packages\pandas\core\groupby\grouper.py", line 259, in __init__
    self.grouper = _convert_grouper(index, grouper)
  File "F:\envs\data_analysis\lib\site-packages\pandas\core\groupby\grouper.py", line 681, in _convert_grouper
    if len(grouper) != len(axis):
TypeError: len() of unsized object
  • 主要错误代码:
subdivide = np.where(subdivide is None, DefaultArgs.ID, subdivide)
for area, df_area in df.groupby(DefaultArgs.AREA):
     for cate, df_cate in df_area.groupby(subdivide):
     ...
  • 原因:
    groupby可接受的参数类型有:mapping, function, label, or list of labels,一般只用单个字符串或者多个字符串列表用于分组。代码中DefaultArgs.ID subdivide均为字符串,按说都不应该出现问题,然而却出现了该问题。究其原因:np.where返回的对象不是想象中的str格式,返回的是 out : ndarray,本以为np.where的效率较if...else的效率会高不少,却出现预计之外的错误。
  • 修改:
subdivide = DefaultArgs.ID if subdivide is None else subdivide
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值