You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Pandas中将可变长度字符串拆分到多列?

解决MovieLens电影流派拆分问题

问题分析

直接用sep='|'读取movies.csv会出错,因为原文件的分隔符是逗号,|只是genres列内部的流派分隔符,强行用|拆分整行会把movie_id和title挤到同一列,完全不符合需求。

正确处理步骤

1. 正常读取原始数据

先按文件本身的逗号分隔符读取,得到包含movie_id、title、genres的标准DataFrame:

import pandas as pd

# 读取movies.csv,默认sep=','即可
df = pd.read_csv('movies.csv')

2. 流派拆分方案(两种可选)

方案一:拆分为多位置流派列(按顺序分配列)

把每个电影的流派按顺序拆成genre_1、genre_2...列,没有对应位置流派的填充NaN:

# 拆分genres列,expand=True会把拆分结果转为多列
genre_split = df['genres'].str.split('|', expand=True)
# 给拆分后的列命名
genre_split.columns = [f'genre_{idx+1}' for idx in genre_split.columns]
# 合并原数据的movie_id、title和拆分后的流派列
final_df = pd.concat([df[['movie_id', 'title']], genre_split], axis=1)
方案二:拆分为流派哑变量列(直接满足后续哑变量需求)

把所有出现过的流派各设为一列,电影属于该流派则标记为1,否则填充NaN(后续可直接用于建模):

# 按|拆分genres并生成哑变量
genre_dummies = df['genres'].str.get_dummies(sep='|')
# 将0替换为NaN,符合你“不存在对应流派填充NaN”的要求
genre_dummies = genre_dummies.replace(0, pd.NA)
# 合并到原数据
final_df = pd.concat([df[['movie_id', 'title']], genre_dummies], axis=1)

效果示例

以你提供的前10行数据为例,方案二生成的结果会包含Action、Adventure、Animation等列,比如第4行(Father of the Bride Part II)只有Comedy列是1,其他流派列都是NaN。

内容的提问来源于stack exchange,提问作者A Mere Pigeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:40:45