分组聚合YouTube数据时遇TypeError: numpy.ndarray不可哈希问题求助
问题分析与解决方案
错误根源
你用np.where创建的body_focus或type_of_workout列,底层可能是numpy数组类型,且数组中存在不可哈希的元素(比如嵌套数组),或者列的类型未被正确转为pandas可识别的可哈希类型(如category、str),导致groupby无法对其进行分组操作。另外,你的排序方法sort()在新版pandas中已被弃用,也可能引发兼容问题。
修复步骤
确保分组列是可哈希类型
重新创建列时,将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')修正聚合与排序代码
替换弃用的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
相关产品推荐
相关产品推荐

