如何依据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
相关产品推荐
相关产品推荐

