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

如何拆分Pandas DataFrame中长度不一的列表列并生成多列?

解决Pandas列表列拆分(处理长度不一致的情况)

这种列表长度参差不齐的情况确实挺闹心的,我之前处理数据时也碰到过一模一样的问题,给你两个实用的解决办法,都能完美避开索引越界的坑:

方法一:直接用pd.DataFrame转换列表列

这是效率最高的方案,尤其适合处理大数据集:

先假设你的原始DataFrame是这样的:

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2, 3],
    'name split': [['Alice', 'Smith'], ['Bob'], ['Charlie', 'Brown', 'Jr']]
})

执行下面的代码就能完成拆分:

# 将列表列直接转换成新的DataFrame,自动补全短列表的缺失值为NaN
split_df = pd.DataFrame(df['name split'].tolist())

# 把拆分后的列和原DataFrame合并(如果不需要保留原列表列的话)
result_df = pd.concat([df.drop('name split', axis=1), split_df], axis=1)

拆分后的结果会自动适配最长列表的长度,短列表对应的位置填充NaN,完全不会报错:

id012
1AliceSmithNaN
2BobNaNNaN
3CharlieBrownJr

如果想给拆分后的列自定义命名,比如改成name_1、name_2这种格式,可以加一行:

split_df.columns = [f'name_{i+1}' for i in split_df.columns]

方法二:用apply(pd.Series)拆分

这个方法更直观,适合小数据集或者需要额外做简单处理的场景:

split_df = df['name split'].apply(pd.Series)
result_df = pd.concat([df.drop('name split', axis=1), split_df], axis=1)

效果和方法一完全一致,只是底层实现逻辑不同,小数据量下差异可以忽略。

为什么之前的方法会索引越界?

你之前应该是尝试了手动提取列表元素,比如:

# 这种写法会在列表长度不足时直接报错
df['first_name'] = df['name split'].apply(lambda x: x[0])
df['last_name'] = df['name split'].apply(lambda x: x[1]) # 像只有['Bob']的行就会触发索引越界

而上面的两种方法会自动扫描所有列表的最大长度,给长度不足的位置填充NaN,从根源上避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:40:01