如何拆分pandas DataFrame的comment列为多行并保留原direction字段值
pandas 拆分comment列生成新行实现方案
核心思路
先将comment列的每个整字符串按指定分隔符切割为列表,再将列表的每个元素拆分为独立行,原始行的direction值会自动映射到所有拆分后的新行上。
步骤实现
1. 构造示例测试数据
先构造和需求一致的测试数据集,可直接运行验证:
import pandas as pd # 示例中分隔符为顿号、,可替换为实际使用的逗号、分号等任意分隔符 raw_df = pd.DataFrame({ 'comment': ['物流快、服务好、价格实惠', '质量差、发错货、售后差', '包装完好、送货上门'], 'direction': [1, 0, 1] })
2. 最简实现(pandas 1.3.0及以上版本)
直接用内置的str.split+explode方法即可完成需求:
# 按指定分隔符拆分comment列为列表类型 raw_df['comment'] = raw_df['comment'].str.split('、') # 拆分列表为独立行,ignore_index=True用于重置新表的行索引 result_df = raw_df.explode('comment', ignore_index=True)
3. 旧版本pandas兼容实现
如果pandas版本低于1.3.0不支持explode,可以用stack方法实现相同效果:
result_df = raw_df.set_index('direction')['comment']\ .str.split('、', expand=True)\ .stack()\ .reset_index(level=0, name='comment')\ .reset_index(drop=True) # 调整列顺序和原始表一致 result_df = result_df[['comment', 'direction']]
输出示例
最终得到的result_df格式如下:
| comment | direction |
|---|---|
| 物流快 | 1 |
| 服务好 | 1 |
| 价格实惠 | 1 |
| 质量差 | 0 |
| 发错货 | 0 |
| 售后差 | 0 |
| 包装完好 | 1 |
| 送货上门 | 1 |
注意事项
- 如果拆分后存在空字符串/空白字符串需要过滤,可以在拆分后加一步清洗:
raw_df['comment'] = raw_df['comment'].str.split('、').apply(lambda x: [item.strip() for item in x if item.strip()]) - 如果存在多种分隔符(比如同时有顿号和逗号),可以用正则匹配拆分,
split的sep参数传入正则规则即可,比如sep=r'[、,]'可以同时匹配顿号和逗号。
内容的提问来源于stack exchange,提问作者LedZ
相关产品推荐
相关产品推荐

