pandas 我如何用分隔符分隔列,并从拆分的字符串中创建新列?

nhaq1z21  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(139)

这是我目前正在尝试使用的数据集:

我想做的是用逗号分隔所有的'genres'值,然后创建名为'genres_Comedy','genres_Drama ','genres_Family'等的新列,其中每行的值为0或1,这取决于它是否是该流派。我相当肯定这是可能的,我知道如何通过分隔符分隔列,但我不知道如何根据拆分的字符串生成必要的列,也不知道如何将每一行的正确值(0或1)与新生成的列相加。
我已经尝试寻找解决方案,但我的问题有点具体,我找不到任何适用的解决方案,虽然也许我看错了。有人知道我如何才能完成这一点吗?请让我知道,如果有任何其他信息,我可以提供,可能是有帮助的,谢谢阅读。

u4dcyp6a

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)将其重新连接
成交!

  • 我强烈建议在每行代码后打印输出,以查看数据的形状如何演变。如果不可视化,很难理解。*

相关问题