如何将Pandas存储列表的列转换为0/1哑变量列且保留原有行数?
解决方法
你原有思路的问题在于stack操作会将每个拆分出的流派单独转为一行,所以总行数变为所有流派元素的总数量,只需要补充按原行索引聚合的步骤即可,同时要注意处理拆分出的多余空格和空字符串。
完整实现代码:
import pandas as pd # 原始DataFrame构造 dfGenres = pd.DataFrame({'Genres':["[Action, Romance, Mystery, Animal]", "[Bromance, Drama, Mystery]", "[Horror, Monsters, Shounen, Action]"]}) # 核心转换代码 genre_dummies = pd.get_dummies( dfGenres["Genres"].str.split('[\[,\]]', expand=True).stack().str.strip() ).groupby(level=0).sum() # 若需要保留原始Genres列,可直接拼接 dfGenres = dfGenres.join(genre_dummies)
代码说明
str.split('[\[,\]]', expand=True):按[、,、]三个字符拆分字符串,每一个拆分结果存为单独列stack():将多列的拆分结果转为行结构,第一层索引保留原始的行号str.strip():清除每个流派字符串前后的空格,避免空格导致相同流派被识别为不同字段groupby(level=0).sum():按原始行号分组求和,将同一原始行的所有流派哑变量合并为一行,结果值为1代表该行包含对应流派,0代表不包含,最终行数和原始DataFrame完全一致。
内容的提问来源于stack exchange,提问作者The L
相关产品推荐
相关产品推荐

