python 将函数应用于 df pandas - 属性错误

python apply function to df pandas - atribute error

我有一个数据框 "b",其中的数字存储为“12.5%”之类的文本。 一栏是:

1       NaN
2       NaN
3      1.2%
4      0.6%
5       NaN
6      1.4%
7      0.1%
8       NaN
9      5.1%
10     2.5%
11    89.1%
12      NaN
Name: Idaho, dtype: object

我写了一个函数来应用到每一列:

def sinPorc(tbl):
    return float(tbl.replace('%', ''))

但是当我尝试应用它时,我得到:

b.Idaho.apply(sinPorc)

AttributeError: 'float' object has no attribute 'replace'

我还创建了一个示例 table,并应用了该函数,但在这种情况下有效:

ejemplo=pd.DataFrame({'A':['1.3%', 'NaN'],
              'B':['1.3%', '0.7%']})

ejemplo.A.apply(sinPorc)

我得到了预期的结果:

    1.3
    NaN
Name: A, dtype: float64

我不知道为什么我不能把这个功能应用到原来的table。可能是什么问题,我应该怎么做才能解决它?

谢谢。

您原来的方法不起作用,因为 NaN 不是字符串,而是浮点值 np.NaN

试试这个...

np.NaN.replace('%', '')

你会得到同样的错误。

AttributeError: 'float' object has no attribute 'replace'

您可以将 sinPorc 更改为

def sinPorc(tbl):
    if tbl is np.NaN:
        return tbl
    else:
        return float(tbl.replace('%', ''))

这将保留对其他 Pandas 功能有用的 NaN 值,或者您可以将值强制为评论中提到的 Nickil 之类的字符串。

float(str(tbl).replace('%', ''))