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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章