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

如何正确展开含数值的Pandas DataFrame?

如何正确展开Pandas DataFrame中的序列式字符串列?

原始数据

import pandas as pd

id = [100, 101]
nums = ['9, 5', '11, 12, 13']
out = [1, 0]
df = pd.DataFrame({'id': id, 'nums':nums, 'y':out})

错误尝试及结果

通过固定步长截取字符串的方式生成序列,因无法适配多位数数字导致结果残缺:

# 错误的展开代码
df['nums'] = [''.join(i.split()) for i in df['nums']]
df['nums'] = df['nums'].apply(lambda s: [s[:i] for i in range(1, len(s)+1, 2)])
df = df.explode('nums')           
df.reset_index(drop=True)

错误输出:

id  nums    y
0   100 9       1
0   100 9,5     1
1   101 1       0
1   101 11,     0
1   101 11,12   0
1   101 11,12,1 0

期望结果

id  nums      y
0   100 9         1
0   100 9,5       1
1   101 11        0
1   101 11,12     0
1   101 11,12,13  0

正确解决方法

核心思路是先拆分字符串为独立元素,再逐步拼接生成完整序列,避免字符串截取的适配问题:

import pandas as pd

id = [100, 101]
nums = ['9, 5', '11, 12, 13']
out = [1, 0]
df = pd.DataFrame({'id': id, 'nums':nums, 'y':out})

# 1. 将nums拆分为去除空格的元素列表
df['nums_list'] = df['nums'].apply(lambda x: [num.strip() for num in x.split(',')])
# 2. 生成逐步拼接的序列字符串
df['nums'] = df['nums_list'].apply(lambda lst: [', '.join(lst[:i+1]) for i in range(len(lst))])
# 3. 展开列并清理临时数据
df = df.explode('nums').drop('nums_list', axis=1).reset_index(drop=True)

print(df)

运行后输出与期望结果一致:

id          nums  y
0  100            9  1
1  100          9,5  1
2  101           11  0
3  101        11,12  0
4  101  11,12,13  0

内容的提问来源于stack exchange,提问作者DaCard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:48:26