当前位置: 首页 > 面试题库 >

AttributeError:'str'对象没有属性'isnumeric'

商同化
2023-03-14
问题内容

有点困惑,因为我很肯定我以前曾经做过这项工作。

我创建了以下方法…

def p2f(x):
    if x.strip('%').isnumeric():
        return float(x.strip('%'))/100
    elif x in ['SUPP', 'NEW', 'LOWCOV', 'NA', '']:
        return 0.0
    else:
        return x

但是当我在导入的CSV文件上运行它时,会产生此错误:

AttributeError: 'str' object has no attribute 'isnumeric'

尽管我可以看到这isnumericstr文档中的一个属性:

https://pandas.pydata.org/pandas-
docs/stable/generation/pandas.Series.str.isnumeric.html?highlight=isnumeric#pandas.Series.str.isnumeric

除非我没有正确解释信息?


问题答案:

str.isnumeric()仅在Python 3上可用。该错误表明您使用的是Python 2,而只有Python
2unicode.isnumeric()存在。

您应该真正使用str.isdecimal()或更好地使用 异常处理

def p2f(x):
    try:
        return float(x.strip('%'))/100
    except ValueError:
        return 0.0 if x in ('SUPP', 'NEW', 'LOWCOV', 'NA', '') else x

.isnumeric()匹配float()不接受的BMP中的430个Unicode代码点,并且有些代码点.isdigit()返回true也不能转换。

您可以生成自己的表进行检查:

for i in range(2 ** 16):
    c = chr(i)
    if c.isnumeric() or c.isdigit() or c.isdecimal():
        try:
            f = float(c)
        except ValueError:
            f = '<not convertible>'
        di, de, nu = ('\u2705' if test() else '\u274c' for test in (c.isdigit, c.isdecimal, c.isnumeric))
        print(f'{c!a:<6} {c}\tdigit: {di}   decimal: {de}   numeric: {nu}  float: {f}')

产生如下输出:

'0'    0    digit: ✅   decimal: ✅   numeric: ✅  float: 0.0
'1'    1    digit: ✅   decimal: ✅   numeric: ✅  float: 1.0
'2'    2    digit: ✅   decimal: ✅   numeric: ✅  float: 2.0
'3'    3    digit: ✅   decimal: ✅   numeric: ✅  float: 3.0
'4'    4    digit: ✅   decimal: ✅   numeric: ✅  float: 4.0
'5'    5    digit: ✅   decimal: ✅   numeric: ✅  float: 5.0
'6'    6    digit: ✅   decimal: ✅   numeric: ✅  float: 6.0
'7'    7    digit: ✅   decimal: ✅   numeric: ✅  float: 7.0
'8'    8    digit: ✅   decimal: ✅   numeric: ✅  float: 8.0
'9'    9    digit: ✅   decimal: ✅   numeric: ✅  float: 9.0
'\xb2' ²    digit: ✅   decimal: ❌   numeric: ✅  float: <not convertible>
'\xb3' ³    digit: ✅   decimal: ❌   numeric: ✅  float: <not convertible>
'\xb9' ¹    digit: ✅   decimal: ❌   numeric: ✅  float: <not convertible>
'\xbc' ¼    digit: ❌   decimal: ❌   numeric: ✅  float: <not convertible>
'\xbd' ½    digit: ❌   decimal: ❌   numeric: ✅  float: <not convertible>
'\xbe' ¾    digit: ❌   decimal: ❌   numeric: ✅  float: <not convertible>

并且您会发现只有该decimal列的所有不可转换代码点都有叉号。

如果要isdecimal()在Python 2中使用,则必须先将字节字符串解码为Unicode。



 类似资料:
  • 问题内容: 为什么被认为是物体?返回列表中的第一项,但我不能追加到列表中的第一项。谢谢。 Edit01: @pyfunc:谢谢您的解释;现在我明白了。 我需要一个清单清单。因此“来自表单”应为列表。我做到了(如果这不是正确的方法,请更正): 问题答案: myList [1]是myList的元素,其类型是字符串。 myList [1]是str,您不能附加它。myList是一个列表,您应该已经附加了它

  • 问题内容: 我正在尝试使用SQLAlchemy + Python将一个项目添加到我的数据库中,但始终出现错误。 我的database_setup.py: 在将sqlalchemy导入到终端后,我定义了一个要插入的项目: 并绘制一个会话以添加和提交: 当我提交时,我不断收到此错误: 我在我的公司表中添加了一个“ Jawbone”对象,我理解我的“ JawboneUP3”应该与之相关。该对象是通过我通

  • Selenium/Python自动化新手。我在自动注册表单时被阻止。下拉列表是必需的元素,但我收到以下错误。。。 AttributeError:“str”对象没有属性“tag_name” 我把我的代码贴在下面,但是在网上找不到任何答案来解释为什么会这样。非常感谢任何/所有的帮助。 错误来自sel=Select('teamElement')行。

  • 问题内容: 我想转换火花数据框架以使用以下代码添加: 详细的错误消息是: 有人知道我在这里做错了吗?谢谢! 问题答案: 您无法使用数据框,但可以将数据框转换为RDD并通过映射将其映射。在Spark 2.0之前,别名为。使用Spark 2.0,您必须先明确调用。

  • 问题内容: 我如何解决此错误,我是从GitHub下载此代码的。 引发错误 请帮我解决这个问题! 我用了: 我得到这个错误。有人帮我,我只想让它工作为什么这么难? 问题答案: 我怀疑您从中复制代码的地方启用了急切执行功能,即在程序开始时调用了该位置。 您也可以这样做。希望能有所帮助。 更新:请注意,默认情况下,TensorFlow 2.0中启用了急切执行。因此,以上答案仅适用于TensorFlow