AttributeError: 'str' object has no attribute 'isnumeric'
有点困惑,因为我是肯定的,我以前就有过这样的工作。
我创建了以下方法…
1 2 3 4 5 6 7 | 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文件上运行它时,会产生以下错误:
1 | AttributeError: 'str' object has no attribute 'isnumeric' |
虽然我可以看到isnumeric是文档中str的一个属性…
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.series.str.isnumeric.html?highlight=isnumeric pandas.series.str.isnumeric
除非我没有正确解释这些信息?
您应该使用
1 2 3 4 5 | def p2f(x): try: return float(x.strip('%'))/100 except ValueError: return 0.0 if x in ('SUPP', 'NEW', 'LOWCOV', 'NA', '') else x |
您可以生成自己的表来检查:
1 2 3 4 5 6 7 8 9 | 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}') |
它产生如下输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | '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' 2 digit: ? decimal: ? numeric: ? float: <not convertible> '\xb3' 3 digit: ? decimal: ? numeric: ? float: <not convertible> '\xb9' 1 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> |
你会发现只有
如果您想在python2中使用