Python - float 对象不可下标

问题描述 投票:0回答:3

抱歉,我看到了很多与此错误相关的问题,但即使有了所有这些信息,我也无法解决它。

我有一个数据框

df
,其中有一列名为
int_rate
。该列的类型为
O
。它保留百分比,所以每一行就像:
10.95 %
我需要删除
%
符号来转换然后
int
中的列。我尝试过以下代码:

df['int_rate']=df['int_rate'].apply(lambda x: x[:-1])

我收到以下错误:

TypeError:“float”对象不可下标。

我不明白的第一件事是,如果我的列类型不是浮动的,为什么要浮动对象,如果是这样,我怎样才能摆脱

%
符号?

python pandas
3个回答
3
投票

您有“对象”列,因此它可以是各种类型的混合。 首先转换为字符串,然后删除最后一个字符(您也可以按照 shivam 的建议替换百分比)

df['int_rate'] = df['int_rate'].apply(lambda x: str(x)[:-1]  if str(x).endswith('%') else x)

0
投票

您的数据可能包含一些

NaN
值,因为
NaN
在 Pandas 中被视为
float
类型。

您可以执行

df.info()
并查看
Non-Null Count
以检查
int_rate
列的计数是否对应于任何
NaN
值的存在。

如果存在任何

NaN
值,您可以通过仅将代码应用于那些非
NaN
条目来绕过错误,如下所示:

df['int_rate'] = df.loc[df['int_rate'].notna(), 'int_rate'].apply(lambda x: x[:-1])

在这里,我们进行过滤以仅处理具有布尔掩码的那些行:

df['int_rate'].notna()
以排除那些
NaN
条目。


0
投票

据推测,并非所有行都是“nnn.mm %”形式,有些是浮点数...你能尝试一下吗?

df['int_rate']=df['int_rate'].apply(lambda x: x if isinstance(x, float) else float(x[:-1]))
© www.soinside.com 2019 - 2024. All rights reserved.