我正在处理一个只包含str
的数据集,但是str
的值可以是真正的文本,也可以是像"1.0"
和"3.54"
这样的东西。
我想将所有字符串转换为最佳可能的类型,这意味着1.0
应该被转换为int
,3.54
应该被转换为float
,而其他所有内容都应保持为str
。
最好的方法是什么?
我正在处理一个只包含str
的数据集,但是str
的值可以是真正的文本,也可以是像"1.0"
和"3.54"
这样的东西。
我想将所有字符串转换为最佳可能的类型,这意味着1.0
应该被转换为int
,3.54
应该被转换为float
,而其他所有内容都应保持为str
。
最好的方法是什么?
让我们试试
def convert(txt):
try:
k = float(txt)
if k%1 ==0:
return int(k)
return k
except ValueError:
return txt
我现在的想法是,输入要么是一个数字,要么不是,无论如何我们都可以将其转换为浮点数。如果可以被1整除,就是整数,我们完成了。否则它就是浮点数,我们完成了。其他情况:我们无能为力,只能返回它。
try except
块来执行操作。for s in string:
try:
//convert to int or float
except:
pass
int
或 float
,但用户想要知道具体细节。 - lmiguelvargasf你可以使用
strings = ["some weird junk", "1.0", "2.345", -1000]
for string in strings:
try:
number, decimal = string.split(".")
try:
if decimal == "0":
value = int(number)
else:
value = float(string)
except:
value = string
except (ValueError, AttributeError):
try:
value = int(string)
except ValueError:
value = string
print(value, type(value))
这将产生
some weird junk <class 'str'>
1 <class 'int'>
2.345 <class 'float'>
-1000 <class 'int'>
def convert(string):
possible = [str, int, float]
for func in possible:
try:
result = func(string)
except ValueError:
continue
if str(result) == string and type(result) is not str:
return result
return string
strings = ['hello', '1', '1.0', '1.9']
for string in strings:
result = convert(string)
print(type(result), result)
Output:
<class 'str'> hello
<class 'int'> 1
<class 'float'> 1.0
<class 'float'> 1.9
"1.0"
明显是代表一个浮点数(即使它是一个整数值的浮点数)- 为什么你不想将它转换为浮点数呢? - alani