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

如何用高效Pandas方法拆分DataFrame字符串列并展开数据

如何用Pandas原生高效方法拆分字符串列并展开DataFrame

原DataFrame与目标结果

原DataFrame中sizes列是空格分隔的字符串,需要将每个字符串拆分为单独行,同时对应art1列的内容重复对应次数,得到目标结果:

原DataFrame代码:

import pandas as pd

df = pd.DataFrame.from_dict({
    'art1':['n1','n2'],
    'sizes':['35 36 37', '36 38']
})

print(df)

输出:

art1      sizes
0   n1  35 36 37
1   n2     36 38

目标结果代码:

df_result = pd.DataFrame.from_dict({
    'art1':['n1','n1','n1','n2','n2'],
    'sizes':[35,36,37,36,38]
})
        
print(df_result)

输出:

art1  sizes
0   n1     35
1   n1     36
2   n1     37
3   n2     36
4   n2     38

低效的手动循环实现

你当前的实现通过手动循环生成列表,效率较低:

lst_art = []
lst_sizes = [x.split() for x in df['sizes']]
for i in range(len(lst_sizes)):
    for j in range(len(lst_sizes[i])):
        lst_art.append(df['art1'][i])

lst_sizes = sum(lst_sizes, [])
df = pd.DataFrame({'art1':lst_art, 'sizes':lst_sizes})

print(df)

高效的Pandas原生方法

有两种Pandas原生方法可以高效完成这个转换:

方法1:str.split + explode(推荐,Pandas 0.25及以上版本)

explode是Pandas专门为展开列表类型列设计的函数,操作简洁且性能优异:

# 将sizes列按空格拆分为列表
df['sizes'] = df['sizes'].str.split()
# 展开sizes列,自动对应重复art1的值
df_result = df.explode('sizes')
# 可选:将sizes转为整数类型
df_result['sizes'] = df_result['sizes'].astype(int)

print(df_result)

方法2:str.split + stack(兼容旧版Pandas)

如果你的Pandas版本低于0.25,可以用这种方式实现:

# 拆分sizes列为多列,再转为长格式
df_split = df['sizes'].str.split(expand=True)
# 关联art1列,将多列合并为单列并去除空值
df_result = df[['art1']].join(df_split).melt(id_vars='art1', value_name='sizes')
df_result = df_result.dropna(subset=['sizes']).drop(columns='variable').reset_index(drop=True)
# 转为整数类型
df_result['sizes'] = df_result['sizes'].astype(int)

print(df_result)

这两种方法都是Pandas的向量化操作,比手动循环效率提升显著,尤其是处理大数据量时优势更明显。

内容的提问来源于stack exchange,提问作者Константин Прудников

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:41:07