首页 > 解决方案 > 将字典转换为可以转换的浮点数

问题描述

我正在寻找一个可以将我从CSV导入的列表转换为浮点数的函数,其中数字可以转换为浮点数。

在一个 CSV 中,字典看起来像['a':'1','b':'1.1','c':'1.2'],在另一个 CSV 中看起来像['1':'1','2':'1.2','3':'1.5'],它也可能是上述两者的组合['1':'1','1','2':'1.4','UNKNOWN':'1.4']

现在这些是使用导入的,pd.read_csv(SheetAddress, header=None, index_col=0, squeeze=True).to_dict()但是这会将它们全部保留为字符串。我尝试编写一个函数将这些转换为新字典,其中包含所有可以转换为浮点数的字符串,并将字符串保留为字符串。

def DictToInt(DictionaryToConvert, New_Dictionary):
   for Column1, Column2 in DictionaryToConvert.items():
       if Column1.isdigit():
           float(Column1)
       elif Column2.isdigit():
           float(Column2)   

这几乎可以工作,它将我的字典转换为所有[['1':'1','2':'1.2','3':'1.5']类型字典的浮点数,但对于混合类型它不起作用。我还没有在一种['a':'1','b':'1.1','c':'1.2']类型上测试过它,因为它在混合上不起作用,但必须考虑到这一点来构建解决方案。

为什么['UNKNOWN':'1']没有被转换为['UNKNOWN':1.0],我的循环中的逻辑是否不正确?这是这种解决方案的正确方法吗?

标签: pythonpandasdictionary

解决方案


这应该可以解决问题,data是您的原始字典,result--嗯,您猜对了 =)

def convert_to_float(num) :
    try :
        num = float(num)
    except ValueError :
        pass
    return num

result = { convert_to_float(k) : convert_to_float(v) for k,v in data.items() }

推荐阅读