You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分组聚合YouTube数据时遇TypeError: numpy.ndarray不可哈希问题求助

问题分析与解决方案

错误根源

你用np.where创建的body_focus或type_of_workout列,底层可能是numpy数组类型,且数组中存在不可哈希的元素(比如嵌套数组),或者列的类型未被正确转为pandas可识别的可哈希类型(如category、str),导致groupby无法对其进行分组操作。另外,你的排序方法sort()在新版pandas中已被弃用,也可能引发兼容问题。

修复步骤

  1. 确保分组列是可哈希类型
    重新创建列时,将np.where的结果转为pandas的Series或直接指定可哈希的 dtype:

    # 示例:将body_focus转为category类型(适合分类变量)
    videos_df['body_focus'] = pd.Series(np.where(你的条件表达式), dtype='category')
    # 或转为字符串类型(通用方案)
    videos_df['body_focus'] = np.where(你的条件表达式).astype(str)
    # type_of_workout列做同样处理
    videos_df['type_of_workout'] = pd.Series(np.where(你的条件表达式), dtype='category')
    
  2. 修正聚合与排序代码
    替换弃用的sort()为sort_values(),同时确保分组列和数值列类型正确:

    workout_df = videos_df[['Year','body_focus','type_of_workout','viewCount','commentCount','likeCount']]
    # 额外校验:确保Year是整数类型,数值列是数值型
    workout_df['Year'] = workout_df['Year'].astype(int)
    workout_df[['viewCount','commentCount','likeCount']] = workout_df[['viewCount','commentCount','likeCount']].astype(int)
    
    # 执行分组聚合并排序
    aggregated_result = workout_df.groupby(by=['Year','body_focus'])[['viewCount','commentCount','likeCount']].sum().sort_values(by='Year', ascending=True)
    

验证方法

可以先检查列的元素类型,确认没有嵌套数组:

# 检查body_focus列的元素类型
print(workout_df['body_focus'].apply(type).unique())

如果输出中包含numpy.ndarray,说明存在嵌套数组,需要进一步清洗数据(比如提取标量值)。

内容的提问来源于stack exchange,提问作者Olga Klishchuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:19