Python中如何将含数据类型值的字符串转为Pandas可用的字典?
解决字符串字典转Pandas可用类型字典的方法
针对你遇到的问题,这里有几个靠谱的解决办法:
方法1:用eval直接转换(适合可控输入场景)
如果你的输入是自己在控制台手动输入的,不存在恶意代码风险,直接用eval()是最省事的:
import pandas as pd # 假设用户输入的字符串 input_str = '{"Column A": str, "Column B": str}' converters = eval(input_str) # 直接用在read_csv里 df = pd.read_csv('your_file.csv', converters=converters)
注意:如果输入来源不可控,别用eval,避免代码注入风险。
方法2:手动解析+映射类型(更安全)
如果担心eval的风险,可以手动拆分字符串,再把类型字符串映射成实际类型:
import pandas as pd input_str = '{"Column A": str, "Column B": str}' # 先去掉首尾的引号和大括号,处理成干净的键值对字符串 cleaned = input_str.strip('"{}').replace(' ', '') # 拆分键值对 kv_pairs = cleaned.split(',') converters = {} # 定义允许的类型映射,只保留你需要的类型 allowed_types = {'str': str, 'int': int, 'float': float} for pair in kv_pairs: key, type_name = pair.split(':') # 去掉键的引号 key = key.strip('"') if type_name in allowed_types: converters[key] = allowed_types[type_name] # 用在read_csv df = pd.read_csv('your_file.csv', converters=converters)
这种方法只允许你指定的类型,安全性更高,适合不确定输入来源的场景。
方法3:用globals()动态获取类型(折中方案)
如果你需要支持更多内置类型,又不想手动写映射,可以用globals()来获取,但同样要做类型校验:
import ast import pandas as pd input_str = '{"Column A": str, "Column B": str}' converters = {} # 先把类型替换成字符串形式,用ast.literal_eval解析 temp_str = input_str.replace('str', '"str"').replace('int', '"int"').replace('float', '"float"') temp_dict = ast.literal_eval(temp_str.strip('"')) for key, type_name in temp_dict.items(): # 只允许内置类型,避免恶意调用 if type_name in dir(__builtins__): converters[key] = globals()[type_name] df = pd.read_csv('your_file.csv', converters=converters)
这个方法比手动映射灵活,但同样要做校验,只允许内置类型,降低风险。
内容的提问来源于stack exchange,提问作者LCL
相关产品推荐
相关产品推荐

