当前位置: 首页 > news >正文

包含列表的字符串数据拆分成多列

要将包含列表的字符串数据拆分成多列,可以按照以下步骤操作:


步骤 1:解析字符串为列表

使用 ast.literal_eval 将字符串安全转换为 Python 列表:

import pandas as pd
import ast

data = {'original_titles': ["['war action', 'comedy romance', 'drama thriller']"]}
df = pd.DataFrame(data)

# 将字符串转换为列表
df['original_titles'] = df['original_titles'].apply(ast.literal_eval)

步骤 2:横向拆分列表为多列

将列表中的每个元素分配到独立的列,并重命名列名:

# 拆分列表为多列
expanded_df = df['original_titles'].apply(pd.Series)

# 重命名列名(original_titles_1, original_titles_2, ...)
expanded_df.columns = [f'original_titles_{i+1}' for i in range(expanded_df.shape[1])]

# 合并回原 DataFrame
df = pd.concat([df.drop('original_titles', axis=1), expanded_df], axis=1)

输出结果

original_titles_1original_titles_2original_titles_3
war actioncomedy romancedrama thriller

完整代码示例

import pandas as pd
import ast

# 示例数据
data = {'original_titles': ["['war action', 'comedy romance', 'drama thriller']"]}
df = pd.DataFrame(data)

# 1. 将字符串转换为列表
try:
    df['original_titles'] = df['original_titles'].apply(ast.literal_eval)
except SyntaxError:
    # 若格式不标准,手动处理(例如去除多余符号后拆分)
    df['original_titles'] = (
        df['original_titles']
        .str.replace(r"[\[\]']", "", regex=True)
        .str.split(', ')
    )

# 2. 横向拆分为多列
expanded_df = df['original_titles'].apply(pd.Series)
expanded_df.columns = [f'original_titles_{i+1}' for i in range(expanded_df.shape[1])]

# 3. 合并结果
df = pd.concat([df.drop('original_titles', axis=1), expanded_df], axis=1)

print(df)

处理异常情况

  1. 字符串格式错误
    如果原始字符串的格式不标准(如缺少引号或括号),可以使用正则表达式清洗数据:

    df['original_titles'] = (
        df['original_titles']
        .str.replace(r"[\[\]']", "", regex=True)  # 删除 [ ] 和引号
        .str.split(', ')                          # 按逗号和空格拆分
    )
    
  2. 列表长度不一致
    若某些行的列表较短,生成的列会自动填充 NaN,例如:

    data = {'original_titles': ["['war action', 'comedy romance']", "['drama thriller']"]}
    

    输出结果为:

    original_titles_1original_titles_2original_titles_3
    war actioncomedy romanceNaN
    drama thrillerNaNNaN

总结

  • 横向拆分:适合按顺序保留元素(如标题的主次顺序)。
  • 异常处理:确保数据格式统一,必要时手动清洗。
  • 灵活性apply(pd.Series) 自动处理不同长度的列表,用 NaN 填充缺失值。

相关文章:

  • 数字孪生驱动医药仓库安全革命:从被动响应到主动防御的范式转型
  • 我与数学建模之终章
  • spring-ai-alibaba第九章使用Milvus构建大模型RAG应用
  • Python编码规范
  • 【2020】【论文笔记】基于二维光子晶体的光控分光比可调Y——
  • BUUCTF-web刷题篇(13)
  • 高精度矢量内积计算方法 (单精度浮点, 超长矢量)
  • hashtable遍历的方法有哪些
  • uname
  • SpringBoot洗衣店订单管理系统设计与实现
  • LeetCode 3047 求交集区域内的最大正方形面积
  • VScode连接CentOS 7.6虚拟机
  • B站左神算法课学习笔记(P8):贪心
  • Python函数一(五)
  • 算法 | 基于蜘蛛蜂优化算法求解带时间窗的车辆路径问题研究(附matlab代码)
  • ZKmall开源商城:基于Spring Boot 3的高效后端架构设计与实践
  • 三维点云数据的哈希快速查找方法
  • linux驱动学习(十五)之ioctl
  • 软件工程面试题(三十)
  • 【Android】界面布局-相对布局RelativeLayout-例子