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

如何将pandas DataFrame中含嵌套列表的列拆分为多个独立列

实现方案

核心思路

先将字符串格式的嵌套列表转为Python原生列表结构,再扁平化嵌套内容、拆分字段,最后生成随机列名输出为新列。

完整实现代码

步骤1:导入依赖库

import pandas as pd
import ast
import random
import string

步骤2:处理字符串转嵌套列表

首先把X列的字符串格式内容转为实际的嵌套列表结构:

# 示例数据初始化
df = pd.DataFrame({"X": {0: "[['ClinicalTrials.gov Identifier: NCT05105893'], ['Recruitment Status : Completed  First Posted : November 3, 2021  Last Update Posted : November 3, 2021']]"}})

# 字符串转原生嵌套列表,比eval更安全
df['X_list'] = df['X'].apply(ast.literal_eval)

步骤3:扁平化嵌套内容、拆分字段

自定义函数处理嵌套结构,同时按两个空格拆分同一项内的多个独立字段:

def flatten_content(nested_list):
    result = []
    for sub_lst in nested_list:
        for item in sub_lst:
            # 按两个空格拆分同一条目中的多个字段,可根据实际分隔符调整规则
            result.extend([i.strip() for i in item.split('  ') if i.strip()])
    return result

df['flat_content'] = df['X_list'].apply(flatten_content)

步骤4:拆分为新列并生成随机列名

# 计算所有行中最长的字段数,确定需要生成的列数
max_col_num = df['flat_content'].apply(len).max()

# 生成列名(两种方案二选一)
# 方案1:和示例一致的rand+序号格式列名
col_names = [f'rand{i+1}' for i in range(max_col_num)]
# 方案2:完全随机的6位字符列名
# col_names = [''.join(random.choices(string.ascii_letters + string.digits, k=6)) for _ in range(max_col_num)]

# 拆分列表为独立列,合并回原数据表
split_cols = pd.DataFrame(df['flat_content'].tolist(), columns=col_names, index=df.index)
final_df = pd.concat([df[['X']], split_cols], axis=1)

注意事项

  • 不同行的嵌套列表长度不一致时,长度不足的行对应列会自动填充NaN
  • 如果字段分隔符不是两个空格,可修改split方法的参数适配实际数据规则
  • 若不需要保留原X列,可在pd.concat时去掉df[['X']]部分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:08