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

如何将CSV中字符串形式的Decimal列表还原为DataFrame真实列表?

还原CSV中的Decimal列表

方法一:结合ast.literal_eval与自定义解析函数

直接利用ast.literal_eval解析字符串形式的列表,同时传入Decimal命名空间让它识别Decimal类型:

from ast import literal_eval
from decimal import Decimal
import pandas as pd

def parse_decimal_list(s):
    # 安全解析字符串并还原Decimal列表
    return literal_eval(s, {'Decimal': Decimal})

# 读取CSV时指定目标列的转换器
df = pd.read_csv('your_data.csv', converters={'target_column': parse_decimal_list})

说明

  • ast.literal_eval比原生eval更安全,仅解析合法的Python字面量与容器结构,避免执行恶意代码。
  • 通过第二个参数传入{'Decimal': Decimal},让解析器能识别字符串中的Decimal('x')语法,直接还原为Decimal对象。

方法二:正则提取数值后转Decimal

如果字符串格式存在细微变动(如多余空格、符号差异),可以用正则提取所有数值字符串再转换:

import re
from decimal import Decimal
import pandas as pd

def parse_decimal_list(s):
    # 匹配所有Decimal('数值')格式的内容,提取数值部分
    num_matches = re.findall(r"Decimal\('([\d\.]+)'\)", s)
    return [Decimal(num) for num in num_matches]

df = pd.read_csv('your_data.csv', converters={'target_column': parse_decimal_list})

说明

  • 正则表达式r"Decimal\('([\d\.]+)'\)"会精准匹配Decimal('x')或Decimal('x.y')格式的内容,提取其中的数值部分。
  • 这种方法对字符串格式的容错性更强,适合处理非标准格式的输入。

可选优化:写入CSV时提前处理

如果可以控制写入环节,建议先将Decimal列表转为字符串列表再写入,后续读取更简便:

# 写入前转换
df['target_column'] = df['target_column'].apply(lambda lst: [str(num) for num in lst])
df.to_csv('your_data.csv', index=False)

# 读取时还原
df['target_column'] = df['target_column'].apply(lambda s: [Decimal(num) for num in literal_eval(s)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:45