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

如何将包含混合值且字符串无引号的列表字符串转换为实际列表?

无引号混合类型列表格式字符串转换方案

你可以通过以下两种常用方案实现转换,均不需要修改原始数据源:

方案1:正则预处理后安全解析

适合元素顺序不固定、字符串内容规则可预测的场景,使用正则匹配未加引号的字符串元素补全引号后,调用ast.literal_eval完成解析,安全性高于直接使用eval:

import pandas as pd
import re
import ast

# 构造示例DataFrame
df = pd.DataFrame({'col_1': ['[2, A]', '[5, BC]']})

def parse_list_str(s):
    # 匹配所有字母开头的标识符,补双引号
    quoted_str = re.sub(r'([a-zA-Z_][a-zA-Z0-9_]*)', r'"\1"', s)
    # 安全解析为列表
    return ast.literal_eval(quoted_str)

# 应用转换
df['col_1'] = df['col_1'].apply(parse_list_str)

# 测试输出
print(df.loc[0, 'col_1'])  # 输出 [2, 'A']
print(type(df.loc[0, 'col_1']))  # 输出 <class 'list'>

方案2:手动拆分识别元素类型

适合格式规则简单、不想引入正则匹配的场景,直接去除括号拆分元素后,逐个判断类型赋值:

def parse_simple_list(s):
    # 去除首尾括号,拆分所有元素
    elements = [e.strip() for e in s.strip('[]').split(',')]
    res = []
    for ele in elements:
        # 尝试转整型,失败则保留为字符串
        try:
            res.append(int(ele))
        except ValueError:
            res.append(ele)
    return res

# 应用转换
df['col_1'] = df['col_1'].apply(parse_simple_list)

该方案对元素顺序没有要求,即使列表内字符串在前、数值在后也可以正常解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:27:02