为了账号安全,请及时绑定邮箱和手机立即绑定

将熊猫数据框列拆分为多个并遍历它

将熊猫数据框列拆分为多个并遍历它

萧十郎 2022-12-27 15:22:14
我正在尝试采用具有匹配 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


查看完整回答
反对 回复 2022-12-27
  • 1 回答
  • 0 关注
  • 48 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信