如何将存在多种分隔符的影视genre字段拆分为多个独立列
Genre字段拆分及标准化实施方案
前置准备:梳理类型映射规则
提前整理两类规则,避免拆分错误:
- 固定多词类型列表:所有本身包含空格、不可拆分的类型,比如
Science fiction、Dark comedy、Psychological thriller等,避免拆分时把内部空格判定为类型分隔符 - 同义词映射规则:把同类型不同名称的标识统一,示例如下:
Anime→AnimationBiopic→BiographicalFamily film→FamilyHeist film→Heist
步骤1:统一分隔符格式
首先把所有字段里的/、-、带空格的/ 、-这几类分隔符统一替换为不会和类型字符冲突的|符号,代码示例(基于Python+pandas):
import pandas as pd # 读取本地数据集 df = pd.read_csv("netflix_original_films_imdb_scores.csv") # 统一/-两类分隔符为| df['genre_clean'] = df['Genre'].str.replace(r'\s*[-/]\s*', '|', regex=True)
步骤2:处理空格分隔的类型
先把提前梳理好的固定多词类型的内部空格替换为下划线占位,避免被误拆分,再把剩余的空格替换为分隔符:
# 固定多词类型列表,可根据实际场景补充 multi_word_types = [ "Science fiction", "Dark comedy", "Black comedy", "Romantic comedy", "Psychological thriller", "Historical drama", "Crime thriller", "Action thriller", "Action comedy", "Musical comedy" ] # 多词类型占位:空格替换为下划线 for t in multi_word_types: df['genre_clean'] = df['genre_clean'].str.replace(t, t.replace(" ", "_"), regex=False) # 剩余空格全部替换为分隔符| df['genre_clean'] = df['genre_clean'].str.replace(r'\s+', '|', regex=True) # 还原多词类型的空格 for t in multi_word_types: df['genre_clean'] = df['genre_clean'].str.replace(t.replace(" ", "_"), t, regex=False)
步骤3:拆分生成独立类型列
用独热编码方式拆分生成每一个类型的独立列,同时完成同义词合并:
# 按|拆分生成独热编码矩阵 genre_dummies = df['genre_clean'].str.get_dummies(sep='|') # 同义词合并 synonym_map = { "Anime": "Animation", "Biopic": "Biographical", "Family film": "Family", "Heist film": "Heist" } for old_col, new_col in synonym_map.items(): if old_col in genre_dummies.columns: genre_dummies[new_col] = genre_dummies.get(new_col, 0) | genre_dummies[old_col] genre_dummies.drop(old_col, axis=1, inplace=True) # 合并回原数据集 df = pd.concat([df, genre_dummies], axis=1)
结果校验
- 随机抽取10%的样本,人工核对拆分后的类型列与原genre字段的匹配度
- 统计所有类型的出现频次,针对出现次数小于3的稀有类型手动核查,调整映射规则或合并到相似类型
内容的提问来源于stack exchange,提问作者Chris Kim
相关产品推荐
相关产品推荐

