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

如何将DataFrame列表列元素拆分生成新列?解决索引越界问题

拆分DataFrame列表列生成多列的解决方案

场景与需求

原始DataFrame:

keywords
[(caused patient, 0.4807), (wa non, 0.1332), (2021, -0.0076)]
[(incorrect reconstitution, 0.9084), (error, 0.5304), (incorrect, 0.2877)]

需要把keywords列(每行是含3个元组的列表)拆成keyword_1、keyword_2、keyword_3三列,最终结果如下:

keyword_1keyword_2keyword_3
(caused patient, 0.4807)(wa non, 0.1332)(2021, -0.0076)
(incorrect reconstitution, 0.9084)(error, 0.5304)(incorrect, 0.2877)

错误代码及报错

尝试的代码:

new_col_list = ['first_keyword', 'second_keyword','third_keyword']
for n,col in enumerate(new_col_list):
    df[col] = df['keywords'].apply(lambda keywords: keywords[n])
df = df('keywords',axis=1)

执行报错:IndexError: list index out of range

问题分析与解决方法

问题点

  1. 循环里直接用keywords[n]取值,一旦某行的keywords列表长度不够3,就会触发索引越界;
  2. 最后一行删除列的语法错误,应该用df.drop()而不是直接调用df()。

正确实现方式

方式一:高效展开列表(推荐)

利用pd.DataFrame直接把列表列拆成多列,这是最简洁高效的方法:

import pandas as pd

# 将keywords列的列表元素直接转为新DataFrame,指定列名
expanded_cols = pd.DataFrame(df['keywords'].tolist(), columns=['keyword_1', 'keyword_2', 'keyword_3'])
# 合并原DataFrame并删除原keywords列
result_df = pd.concat([df.drop('keywords', axis=1), expanded_cols], axis=1)

方式二:修复原循环代码

如果要保留循环逻辑,需要增加长度判断避免索引越界,同时修正删除列的语法:

new_col_list = ['keyword_1', 'keyword_2','keyword_3']
for n, col in enumerate(new_col_list):
    # 先判断列表长度,不足时填充None
    df[col] = df['keywords'].apply(lambda x: x[n] if len(x) > n else None)
# 正确删除keywords列
df = df.drop('keywords', axis=1)

两种方法都能得到预期的DataFrame结构,方式一处理大数据量时效率更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:32:37