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

如何依据DataFrame中type列的类型转换value列的值类型?

将Pandas DataFrame按指定类型转换为目标字典

原始数据与需求

现有如下Pandas DataFrame,其中value列的所有值均为字符串类型,需要根据type列指定的类型完成转换,最终生成指定结构的字典:

import pandas as pd

data = [("A", "2.1", "float"), ("B", "-2.0", "float"), ("C", "5.45", "int"), ("D", "John", "str"), ("E", "['US', 'UE']", "list"), ("F", "{'alive': True}", "dict")]
df = pd.DataFrame(data, columns=['vname','value','type'])
print(df)

输出:

vname            value   type
0     A              2.1  float
1     B             -2.0  float
2     C              5.45   int
3     D             John    str
4     E         ['US', 'UE']  list
5     F  {'alive': True}   dict

目标字典:

{ 'A':2.1, 'B':-2.0, 'C':5, 'D':'John', 'E':['US','UE'], 'F':{'alive': True} }

解决方案

通过自定义转换函数结合pandas.DataFrame.apply实现类型转换,最终生成目标字典:

import pandas as pd
import ast

# 定义类型转换函数
def convert_value(row):
    val = row['value']
    type_ = row['type']
    if type_ == 'float':
        return float(val)
    elif type_ == 'int':
        # 处理带小数的字符串,先转float再取整
        return int(float(val))
    elif type_ == 'str':
        return val
    elif type_ in ('list', 'dict'):
        # 用ast.literal_eval安全解析字符串形式的容器类型
        return ast.literal_eval(val)
    else:
        return val

# 应用转换并生成字典
result_dict = df.apply(convert_value, axis=1).set_axis(df['vname']).to_dict()
print(result_dict)

关键说明

  • ast.literal_eval:安全地将字符串形式的列表、字典转换为实际的Python对象,避免使用eval()带来的安全风险。
  • int类型转换:针对"5.45"这类带小数的字符串,先转换为float再取整,避免直接转int报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:10:22