这是我目前正在尝试使用的数据集:
我想做的是用逗号分隔所有的'genres'值,然后创建名为'genres_Comedy','genres_Drama ','genres_Family'等的新列,其中每行的值为0或1,这取决于它是否是该流派。我相当肯定这是可能的,我知道如何通过分隔符分隔列,但我不知道如何根据拆分的字符串生成必要的列,也不知道如何将每一行的正确值(0或1)与新生成的列相加。
我已经尝试寻找解决方案,但我的问题有点具体,我找不到任何适用的解决方案,虽然也许我看错了。有人知道我如何才能完成这一点吗?请让我知道,如果有任何其他信息,我可以提供,可能是有帮助的,谢谢阅读。
1条答案
按热度按时间u4dcyp6a1#
当然,这是非常可行的,但需要几个步骤。
步骤1
首先,将字符串列转换为字符串列表。
df["genres"] = df.genres.apply(lambda x: x.split(","), axis=1)
。(注意,如果genres
可能以,
结尾,那么您需要删除它,或者以""
空字符串结束流派)现在,一般的策略是从这个列表列中创建一个新的 Dataframe (具有相同的行数,并且具有
Genre_Comedy
等列),并将其重新连接到原始 Dataframe 上。第二步
接下来:通过
genres = df.genres.apply(pd.Series).stack()
从genres
列创建新帧。apply(pd.Series)
将list
转换为pd.Series
,然后stack()
将其分解为多索引Series。步骤3
接下来我们使用
get_dummies
;这是从一个列创建多个列的常用方法。如果您的列是animal
,一行是cat
,另一行是dog
,那么您最终将得到两个新列;一个叫做animal_cat
,另一个叫做animal_dog
。这里也是一样,除了现在我们正在处理一个多索引系列。像这样使用它:genres = pd.get_dummies(genres)
。现在您将拥有一个包含所有流派列(恐怖,喜剧等)的多索引 Dataframe 。最后只需通过genres = genres.sum(level=0)
折叠多索引。步骤4
最后通过
df = df.concat(genres, axis=1)
将其重新连接成交!