如何按分隔符拆分列以使用.value_counts()统计艺术家频次?
解决艺术家列拆分与频次统计问题
错误原因分析
第一个报错
'function'对象没有split属性:
你在apply的lambda里引用了artistsbypopularitylist.split(","),这个变量并非当前行的字符串列值(大概率是个函数或其他非字符串对象),自然没有split方法。而且用apply处理字符串列效率远不如pandas内置的str方法。第二个报错
列长度必须与key一致:str.split(',',expand=True)会根据数据中艺术家数量最多的行生成对应列数(比如某行有3位艺术家就会生成3列),但你只指定了['Artist1','Artist2']两列,列数不匹配导致报错。
正确实现代码
直接用pandas的字符串方法拆分后转一维数组,再统计频次:
# 按逗号拆分艺术家列,展开为多列 split_artists = alldata['Artist Name(s)'].str.split(',', expand=True) # 将多列转为一维Series,同时去除艺术家名字前后的空格,过滤空值 all_artists = split_artists.stack().str.strip().dropna() # 统计每位艺术家的出现频次 artist_frequency = all_artists.value_counts() # 输出结果 print(artist_frequency)
代码说明
str.split(',', expand=True):把每个单元格的字符串按逗号拆分成多列,自动适配最多的艺术家数量。stack():将多列的DataFrame转为一维Series,所有艺术家名字都在同一列。str.strip():去除拆分后名字前后的空格(比如", The Weeknd"会变成"The Weeknd")。dropna():过滤拆分后可能出现的空值(比如部分行艺术家数量少,拆分后会有NaN)。value_counts():统计每个艺术家的出现次数。
内容的提问来源于stack exchange,提问作者Lollo
相关产品推荐
相关产品推荐

