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('%', ''))
我有一个数据框 "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('%', ''))