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

如何从DataFrame含列表的列中生成符合指定规则的新列

解决DataFrame列表列拆分问题

我来帮你搞定这个需求!针对你的DataFrame中存储列表的Others列,我们可以通过自定义逻辑处理每个列表的长度,来精准生成Surname、Age和Weight这三个新列。

步骤1:先构造示例DataFrame(方便验证)

首先我们先还原你的输入数据:

import pandas as pd

data = {
    'First_Name': ['Ken', 'Cole', 'Eddie'],
    'Others': [["Batman","28","5.5"], ["36","6.1"], ["24"]]
}
df = pd.DataFrame(data)

步骤2:定义拆分逻辑并生成新列

我们可以用列表推导式结合pd.DataFrame来高效处理,这种方式比apply函数性能更优,适合大数据量场景:

# 遍历每个列表,根据长度分配对应值
new_columns = pd.DataFrame(
    [
        # 列表长度为3时:Surname=第1个元素,Age=第2个,Weight=第3个
        (lst[0], lst[1], lst[2]) if len(lst) == 3 else
        # 列表长度为2时:Surname空,Age=第1个,Weight=第2个
        (pd.NA, lst[0], lst[1]) if len(lst) == 2 else
        # 列表长度为1时:Surname空,Age=第1个,Weight空
        (pd.NA, lst[0], pd.NA) if len(lst) == 1 else
        # 其他长度(比如空列表):全部空值
        (pd.NA, pd.NA, pd.NA)
        for lst in df['Others']
    ],
    index=df.index,
    columns=['Surname', 'Age', 'Weight']
)

# 将新列合并到原DataFrame
df = pd.concat([df, new_columns], axis=1)

验证结果

运行后你会得到符合预期的输出:

First_NameOthersSurnameAgeWeight
Ken["Batman","28","5.5"]Batman285.5
Cole["36","6.1"]366.1
Eddie["24"]24

(注:你示例中的数值变化应该是笔误,代码会严格按照列表中的原始值填充;如果需要转换数值格式,可以在逻辑里加上float()或int()处理,比如int(lst[1]))

另一种直观方式:用apply函数

如果你觉得列表推导式不够直观,也可以用apply结合自定义函数实现:

def process_others(row):
    lst = row['Others']
    if len(lst) == 3:
        return pd.Series([lst[0], lst[1], lst[2]], index=['Surname', 'Age', 'Weight'])
    elif len(lst) == 2:
        return pd.Series([pd.NA, lst[0], lst[1]], index=['Surname', 'Age', 'Weight'])
    elif len(lst) == 1:
        return pd.Series([pd.NA, lst[0], pd.NA], index=['Surname', 'Age', 'Weight'])
    else:
        return pd.Series([pd.NA, pd.NA, pd.NA], index=['Surname', 'Age', 'Weight'])

df[['Surname', 'Age', 'Weight']] = df.apply(process_others, axis=1)

两种方式都能满足你的需求,按需选择即可。

内容的提问来源于stack exchange,提问作者frankfrank-o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:12:40