如何将DataFrame中含空格分隔值的行拆分为多行(仅修改目标列)
拆分DataFrame指定列为多行,其余列保持不变
嘿,这个需求我之前做数据清洗的时候经常碰到,用Pandas就能轻松解决,给你两种实用的方法,看哪种更适合你的场景:
方法一:str.split() + explode()(简洁高效,推荐)
这是Pandas 0.25+版本就支持的原生方法,代码量少,逻辑清晰,处理大多数场景都够用。
步骤:
- 用
str.split()把目标列(比如U.N.Region)按空格拆分成列表格式; - 用
explode()把列表中的每个元素拆成单独一行,其他列的值会自动复制对应到每一行。
代码示例:
先创建一个模拟的DataFrame:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'U.N.Region': ['North West', 'South East', 'Central'], 'Country': ['UK', 'India', 'Nigeria'], 'Population': [67000000, 1400000000, 220000000] })
然后执行拆分操作:
# 1. 将目标列按空格拆分为列表 df['U.N.Region'] = df['U.N.Region'].str.split(' ') # 2. 拆分列表为多行,重置索引 result_df = df.explode('U.N.Region', ignore_index=True)
输出结果:
U.N.Region Country Population 0 North UK 67000000 1 West UK 67000000 2 South India 1400000000 3 East India 1400000000 4 Central Nigeria 220000000
方法二:apply() + stack()(灵活适配复杂场景)
如果你的数据有特殊情况(比如目标列存在空值、分隔符不固定,或者需要同时处理多列),可以用这种方法,灵活性更高。
代码示例:
result_df = df.set_index(['Country', 'Population'])['U.N.Region'] \ .str.split(' ', expand=True) # 拆分后展开为多列 .stack() # 将列转为行,形成多级索引 .reset_index(name='U.N.Region') # 重置索引并重命名目标列 .drop('level_2', axis=1) # 删除多余的层级索引列
这个方法的核心是先把不需要拆分的列设为索引,避免拆分时重复复制,再通过stack()把拆分后的列转成行,最后恢复索引结构。
注意事项:
- 如果目标列存在空值,
explode()默认会保留空行,要是想过滤掉,可以在最后加.dropna(subset=['U.N.Region']); - 如果分隔符不是空格,把
str.split()里的参数改成对应的即可,比如逗号分隔就用str.split(', '); - 要是需要同时拆分多列,方法一也支持,只需要把
explode()的参数改成列名列表,比如explode(['Col1', 'Col2'])。
内容的提问来源于stack exchange,提问作者Viktor Avdulov
相关产品推荐
相关产品推荐

