如何在Pandas中拆分DataFrame列并将每个值存为新行?
解决关键词拆分为新行并合并回原DataFrame的问题
我明白你想要的效果——把竖线分隔的关键词拆成单独的行,同时保留原DataFrame里的其他数据,方便后续用groupby做相关性分析对吧?你当前的代码是把拆分结果放到新列里,确实没达到预期。这里有几个实用的方法帮你实现需求:
方法一:使用explode(推荐,Pandas 0.25及以上版本支持)
这是最简洁高效的方式,Pandas专门为这种“把列表拆成多行”的场景提供了explode方法:
# 第一步:将竖线分隔的字符串转为列表 df['keywords'] = df['keywords'].str.split('|') # 第二步:把列表中的每个元素拆成单独的行,自动保留原数据的其他列 df_exploded = df.explode('keywords')
举个例子,如果你的原DataFrame是这样:
| index | title | keywords |
|---|---|---|
| 0 | Jurassic Park | monster |
执行完代码后,df_exploded会变成:
| index | title | keywords |
|---|---|---|
| 0 | Jurassic Park | monster |
| 0 | Jurassic Park | dna |
| 0 | Jurassic Park | tyrannosaurus rex |
| 0 | Jurassic Park | velociraptor |
| 0 | Jurassic Park | island |
完全符合你的需求,之后直接对df_exploded用groupby('keywords')就能做分析了。
方法二:使用stack(兼容旧版Pandas)
如果你用的是低于0.25版本的Pandas,没法用explode,可以用stack来实现:
# 拆分keywords列并转为堆叠格式 split_keywords = df['keywords'].str.split('|', expand=True).stack() # 重置索引,去掉堆叠产生的多余层级,并重新命名列 split_keywords = split_keywords.reset_index(level=1, drop=True).rename('keywords') # 合并回原DataFrame,去掉原来的keywords列 df_exploded = df.drop('keywords', axis=1).join(split_keywords)
这个方法的原理是先把拆分后的列转为行,再通过索引匹配合并回原数据,最终效果和方法一一致。
额外小提示
如果你的关键词里可能存在前后空格(比如monster | dna这种),可以在拆分的时候顺便清理:
df['keywords'] = df['keywords'].str.split('|').apply(lambda x: [k.strip() for k in x])
这样能避免后续分析时出现' monster'和'monster'被当成不同关键词的问题。
内容的提问来源于stack exchange,提问作者bytebybyte
相关产品推荐
相关产品推荐

