我正在尝试采用具有匹配 ID 的艺术家,使音乐跨越各种单一到流派的组合。这就是我想要做的Artist | Id | Genre | Jazz | Blues | Rock | Trap | Rap | Hip-Hop | Pop | Rb |----------------------------------------------------------------------------------------------------Bob | 1 | [Jazz, Blues] | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0----------------------------------------------------------------------------------------------------Fred | 2 | [Rock,Jazz] | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0----------------------------------------------------------------------------------------------------Jeff | 3 | [Trap, Rap, Hip-Hop] | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0----------------------------------------------------------------------------------------------------Amy | 4 | [Pop, Rock, Jazz] | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0----------------------------------------------------------------------------------------------------Mary | 5 | [Hip-Hop, Jazz, Rb] | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1----------------------------------------------------------------------------------------------------这是我得到的错误---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-50-7a4ed81e14d7> in <module> 11 for index, row in artist_df.iterrows(): 12 x.append(index)---> 13 for i in row['genre']: 14 artists_with_genres.at[index, genre] = 1 15 TypeError: 'float' object is not iterable这些(艺术家)流派是我将在结合其他因素(如年份、歌曲或人口统计数据)时用来帮助确定相似艺术家的属性。我正在创建和迭代的新专栏将指定艺术家是否属于某个流派。用 1/0 来简单地表示艺术家是否是摇滚/嘻哈/陷阱等。使用属性的二进制表示。这是当前的数据框获取我的数据框并将流派拆分为单独的类型,以便我可以转换为 1/0 二进制表示。我需要将流派设置为索引吗?
1 回答
aluckdog
TA贡献1847条经验 获得超7个赞
尝试使用get_dummies:
df['Genre'] = df['Genre'].str.split('|')
dfx = pd.get_dummies(pd.DataFrame(df['Genre'].tolist()).stack()).sum(level=0)
df = pd.concat([df, dfx], axis=1).drop(columns=['Genre'])
print(df)
Artist Id Blues Hip-Hop Jazz Pop Rap Rb Rock Trap
0 Bob 1 1 0 1 0 0 0 0 0
1 Fred 2 0 0 1 0 0 0 1 0
2 Jeff 3 0 1 0 0 1 0 0 1
3 Amy 4 0 0 1 1 0 0 1 0
4 Mary 5 0 1 1 0 0 1 0 0
详细解释看这里 -> Pandas column of lists to separate columns
添加回答
举报
0/150
提交
取消