Python如何检查列表中的项目是不是为浮点数,如果是,将其更改为字符串? [复制]

Posted

技术标签:

【中文标题】Python如何检查列表中的项目是不是为浮点数,如果是,将其更改为字符串? [复制]【英文标题】:Python How to check if an item in a list is a float, and if so, change it to a string? [duplicate]Python如何检查列表中的项目是否为浮点数,如果是,将其更改为字符串? [复制] 【发布时间】:2021-03-30 18:30:40 【问题描述】:

我正在遍历一个 Excel 工作表。我在某些专栏中的一些信息以float 的形式出现。我已经通过 excel 尽我所能尝试让它不是浮动的,它不会修复它。

我正在使用 xlrd 读取数据。

for i in range(ws.nrows):
    row = ws.row_values(i)
    if type(row[1]) == 'float':
        row[1] = str(row[1])
    if ',' in row[1]:
        DO STUFF

我不断收到此错误:

if ',' in row[1]:
TypeError: argument of type 'float' is not iterable

由于某种原因,这不起作用。我什至可以在遍历列表时打印类型,它会显示类“float”,但它似乎永远不会进入 if 类型循环。

【问题讨论】:

【参考方案1】:

发生的情况是 row[1] 的值是一个浮点数(您在第一个 if 语句中没有正确捕捉到这一点 - 见下文)。当您评估a in b 时,Python 会尝试遍历b 以查看a 是否出现在其中。这就是为什么您会收到浮点不可迭代的错误。

现在对于 if 语句 - type 函数不返回字符串(尽管您可以使用 ie str(type(x)) 强制它返回。要检查类型是否为浮点数,您需要执行以下操作:

if type(row[1]) is float:
    # do stuff
    pass
else:
    # do other stuff
    pass

不过,您最好检查一下它是否不是字符串 -

if type(row[1]) is not str:
    # do stuff for floats
    pass
else:
    # do other stuff that involves checking if a substring is present
    pass

另请参阅:How to determine a Python variable's type?

【讨论】:

【参考方案2】:

type 返回实际的 float 类,而不是字符串 'float'。检查类型的最简单方法是使用 isinstance 内置函数:

if isinstance(row[1], float):
    row[1] = str(row[1])

【讨论】:

天哪,谢谢。这正是我所需要的。我现在唯一的问题是我的一些数字有点大,我得到了这个结果:8.156e+26,而我应该得到一个 11 位数字。

以上是关于Python如何检查列表中的项目是不是为浮点数,如果是,将其更改为字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

检查 csv 文件 python3 中的非浮点数

如何检查一个值是不是是javascript中的浮点数[重复]

如何检查字符串是不是代表浮点数

如何在python中将数据帧中的符号转换为浮点数?

如何将列表中的字符串值更改为 Python 中的浮点数

将列表中的所有字符串转换为浮点数。适用于单个列表,但不适用于数据框