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

如何在DataFrame的元组列表中通过列表推导式提取指定位置字符串

从DataFrame的字符串型元组列表中提取元素

问题背景

现有如下DataFrame,col列中的内容是字符串形式的元组列表:

import pandas as pd
df = {'col':[ "[('affect', 'the risks')]", "[('have', 'we'), ('breached', 'our systems'), ('cease', 'our computer'), ('suffer', ''), ('allow', ''), ('damage', 'misappropriation'), ('require', 'proprietary'), ('incur', 'us'), ('remediate', 'us'), ('resolve', 'us')]"]}
df = pd.DataFrame(df)

需要提取每个元组的第1个(索引0)和第2个(索引1)元素,分别生成item0和item1列,期望输出格式如下:

# item0列内容
0    'affect'
1    'have', 'breached', 'cease', 'suffer', 'allow', 'damage', 'require', 'incur', 'remediate', 'resolve'
Name: item0, dtype: object

# item1列内容
0    'the risks'
1    'we', 'our systems', 'our computer', '', 'misappropriation', 'proprietary', 'us', 'us', 'us'
Name: item1, dtype: object

解决方案

实现思路

  1. 解析字符串为Python对象:先用ast.literal_eval()将col列的字符串内容转换成真实的元组列表(安全替代eval(),避免执行恶意代码)。
  2. 用zip()解包提取元素:利用zip(*x)将元组列表解包为两个元素序列,分别对应所有元组的索引0和索引1元素。
  3. 拼接成目标字符串:遍历元素序列,给非空元素添加引号,再用逗号连接成符合要求的格式。

完整代码

import pandas as pd
import ast

# 初始化原DataFrame
df = {'col':[ "[('affect', 'the risks')]", "[('have', 'we'), ('breached', 'our systems'), ('cease', 'our computer'), ('suffer', ''), ('allow', ''), ('damage', 'misappropriation'), ('require', 'proprietary'), ('incur', 'us'), ('remediate', 'us'), ('resolve', 'us')]"]}
df = pd.DataFrame(df)

# 解析字符串为元组列表
df['parsed_col'] = df['col'].apply(ast.literal_eval)

# 生成item0列:用zip()提取所有元组的索引0元素,拼接成字符串
df['item0'] = df['parsed_col'].apply(
    lambda x: ", ".join([f"'{item}'" if item else "" for item in zip(*x)[0]])
)

# 生成item1列:用zip()提取所有元组的索引1元素,拼接成字符串
df['item1'] = df['parsed_col'].apply(
    lambda x: ", ".join([f"'{item}'" if item else "" for item in zip(*x)[1]])
)

# 输出目标结果
result_df = df[['item0', 'item1']]
print(result_df)

关键说明

  • ast.literal_eval():专门用于解析字符串形式的Python内置数据类型(列表、元组、字典等),比eval()更安全。
  • zip(*x):将元组列表x解包,把每个元组的对应位置元素聚合为独立序列,比如zip(*[(a,b),(c,d)])会得到(a,c)和(b,d)两个元组,正好对应我们需要的索引0和索引1元素集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:12:09