如何将DataFrame指定列列表中的数据转换为Decimal类型?
将DataFrame指定列转为Decimal类型
你写的遍历代码有问题——Decimal(df[column_name])会直接报错,因为df[column_name]是Pandas的Series对象,而Decimal()只能处理单个值,没法直接作用于整个Series。下面给你两种可行的实现方式:
方法一:遍历列逐个转换
用apply对每一列的每个元素单独应用Decimal转换,代码如下:
from decimal import Decimal column_list = ['Parameter 1', 'Parameter 2', ..., 'Parameter N'] for col in column_list: df[col] = df[col].apply(Decimal)
如果列里存在空值(NaN),直接转会报错,可以加个判断处理:
import pandas as pd from decimal import Decimal for col in column_list: df[col] = df[col].apply(lambda x: Decimal(x) if pd.notna(x) else x)
方法二:批量转换(更简洁)
用applymap对指定列的所有元素批量转换,代码更紧凑:
from decimal import Decimal import pandas as pd column_list = ['Parameter 1', 'Parameter 2', ..., 'Parameter N'] df[column_list] = df[column_list].applymap(Decimal)
处理空值的版本:
df[column_list] = df[column_list].applymap(lambda x: Decimal(x) if pd.notna(x) else x)
额外提醒
- 要确保列中的数据是可转换为Decimal的类型(比如数字、数字格式的字符串),如果有非数值内容,转换会抛异常,得先做数据清洗。
- 如果是浮点数转Decimal,建议先转成字符串再转换,避免浮点数本身的精度丢失:
df[col] = df[col].apply(lambda x: Decimal(str(x)) if pd.notna(x) else x)
内容的提问来源于stack exchange,提问作者lapots
相关产品推荐
相关产品推荐

